Mam problem z weryfikacją, że próbę o IInterface.SomeMethod<T>(T arg)
został wywołany przy użyciu Moq.Mock.Verify
.Sprawdzanie metody ogólnej wywołanej za pomocą Moq
jestem w stanie zweryfikować tej metody został powołany na interfejsie „Standard” albo za pomocą It.IsAny<IGenericInterface>()
lub It.IsAny<ConcreteImplementationOfIGenericInterface>()
, i nie mam żadnych problemów z weryfikacją rodzajowe wywołanie metody z wykorzystaniem It.IsAny<ConcreteImplementationOfIGenericInterface>()
, ale nie mogę zweryfikować metoda rodzajowa nazwano stosując It.IsAny<IGenericInterface>()
- zawsze mówi, że metoda nie została wywołana, a test jednostkowy nie powiedzie się.
Oto moja próba jednostka:
public void TestMethod1()
{
var mockInterface = new Mock<IServiceInterface>();
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<ConcreteSpecificCommand>()), Times.Once());
mockInterface.Verify(serviceInterface => serviceInterface.NotGenericMethod(It.IsAny<ISpecificCommand>()), Times.Once());
mockInterface.Verify(serviceInterface => serviceInterface.GenericMethod(It.IsAny<ConcreteSpecificCommand>()), Times.Once());
// this line breaks: "Expected invocation on the mock once, but was 0 times"
mockInterface.Verify(serviceInterface => serviceInterface.GenericMethod(It.IsAny<ISpecificCommand>()), Times.Once());
}
Oto moja klasa badanego:
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);
}
}
Oto mój IServiceInterface
:
public interface IServiceInterface
{
void NotGenericMethod(ISpecificCommand command);
void GenericMethod<T>(T command);
}
I tu jest mój interfejsu/klasy hierarchia dziedziczenia:
public interface ISpecificCommand
{
}
public class ConcreteSpecificCommand : ISpecificCommand
{
}
Zostało to poprawione. – arni