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

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions