Skip to content

MoqKernel.GetMock<T> throws ArgumentException when T is Func<...> #39

@telamar

Description

@telamar

There is the following example:

  1. Interface
    public interface ICustomInterface { ... }

  2. Class
    public class CustomObject
    {
    public CustomObject(Func< ICustomInterface > factoryFunc) { ... }
    }

  3. Test
    [SetUp]
    public void TestInitialize()
    {
    Mock<Func< ICustomInterface >> factoryFuncMock =
    MoqMockingKernel.GetMock<Func< ICustomInterface >>(); <-- ArgumentException
    factoryFuncMock.Setup(...).Returns(...);
    }

As I understand, the exception is thrown because Mock.Get< T >(T) waits for Func< ICustomInterface >, but MoqMockingKernel.Get<Func< ICustomInterface >> returns a FunctionFactory<> type instead of Func<>

This case is helpful when we try to inject Func< ... > with several generic types and then we want to check that Func was called with correct arguments
Example:
Mock<Func<bool, ICustomInterface>> factoryFuncMock = MoqMockingKernel.GetMock<Func<bool, ICustomInterface>>();
factoryFuncMock.Setup(factoryFunc => factoryFunc(true)).Returns(...);

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions