Проверка универсального метода, вызванного с помощью Moq
У меня возникли проблемы с проверкой этого макетаIInterface.SomeMethod(T arg)
был вызван с помощью .I 'Moq.Mock.Verify
Я могу проверить, что метод был вызван на "Стандарт» интерфейс либо с помощьюIt.IsAny()
или жеIt.IsAny()
и у меня нет проблем с проверкой общего вызова метода с помощьюIt.IsAny()
, Но я могу'проверить, что общий метод был вызван с помощьюIt.IsAny()
- это всегда говорит о том, что метод не был вызван и модульный тест не пройден.
Вот мой юнит тест:
public void TestMethod1()
{
var mockInterface = new Mock();
var classUnderTest = new ClassUnderTest(mockInterface.Object);
classUnderTest.Run();
// next three lines are fine and pass the unit tests
mockInterface.Verify(serviceInterface => serviceInterface.NotGenericMethod(It.IsAny()), Times.Once());
mockInterface.Verify(serviceInterface => serviceInterface.NotGenericMethod(It.IsAny()), Times.Once());
mockInterface.Verify(serviceInterface => serviceInterface.GenericMethod(It.IsAny()), Times.Once());
// this line breaks: "Expected invocation on the mock once, but was 0 times"
mockInterface.Verify(serviceInterface => serviceInterface.GenericMethod(It.IsAny()), Times.Once());
}
Вот мой тестируемый класс:
public class ClassUnderTest
{
private IServiceInterface _service;
public ClassUnderTest(IServiceInterface service)
{
_service = service;
}
public void Run()
{
var command = new ConcreteSpecificCommand();
_service.GenericMethod(command);
_service.NotGenericMethod(command);
}
}
Вот мой:IServiceInterface
public interface IServiceInterface
{
void NotGenericMethod(ISpecificCommand command);
void GenericMethod(T command);
}
И вот моя иерархия наследования интерфейса / класса:
public interface ISpecificCommand
{
}
public class ConcreteSpecificCommand : ISpecificCommand
{
}