का उपयोग करके जेनेरिक विधि की पुष्टि करना मुझे IInterface.SomeMethod<T>(T arg)
का नकल सत्यापित करने में समस्या हो रही है जिसे Moq.Mock.Verify
का उपयोग करके बुलाया गया था।मोक
मुझे लगता है कि विधि "स्टैंडर्ड" इंटरफेस या तो It.IsAny<IGenericInterface>()
या It.IsAny<ConcreteImplementationOfIGenericInterface>()
के प्रयोग पर बुलाया गया था सत्यापित कर सकते हैं कर रहा हूँ, और मैं It.IsAny<ConcreteImplementationOfIGenericInterface>()
का उपयोग कर एक सामान्य विधि कॉल की पुष्टि करने के लिए कोई मुसीबतों है, लेकिन मैं पुष्टि नहीं कर सकते एक सामान्य विधि का उपयोग कर बुलाया गया था It.IsAny<IGenericInterface>()
- यह हमेशा कहता है कि विधि को नहीं बुलाया गया था और इकाई परीक्षण विफल रहता है।
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());
}
यहाँ परीक्षण के अंतर्गत मेरी कक्षा है:
यहाँ मेरी इकाई परीक्षण है
public interface IServiceInterface
{
void NotGenericMethod(ISpecificCommand command);
void GenericMethod<T>(T command);
}
और यहाँ मेरी इंटरफ़ेस/वर्ग है:
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 ISpecificCommand
{
}
public class ConcreteSpecificCommand : ISpecificCommand
{
}
इसे तब से सही किया गया है। – arni