usar - metodos y funciones en c#
Verificar una llamada de método usando Moq (1)
Soy bastante nuevo en pruebas unitarias en C # y estoy aprendiendo a usar Moq. A continuación se muestra la clase que estoy tratando de probar.
class MyClass
{
SomeClass someClass;
public MyClass(SomeClass someClass)
{
this.someClass = someClass;
}
public void MyMethod(string method)
{
method = "test"
someClass.DoSomething(method);
}
}
class Someclass
{
public DoSomething(string method)
{
// do something...
}
}
A continuación está mi TestClass:
class MyClassTest
{
[TestMethod()]
public void MyMethodTest()
{
string action="test";
Mock<SomeClass> mockSomeClass = new Mock<SomeClass>();
mockSomeClass.SetUp(a => a.DoSomething(action));
MyClass myClass = new MyClass(mockSomeClass.Object);
myClass.MyMethod(action);
mockSomeClass.Verify(v => v.DoSomething(It.IsAny<string>()));
}
}
Obtengo la siguiente excepción:
Expected invocation on the mock at least once, but was never performed
No setups configured.
No invocations performed..
Solo quiero verificar si se llama o no al método "MyMethod". ¿Me estoy perdiendo de algo?
¡Gracias por adelantado!
Estás comprobando el método incorrecto. Moq requiere que configure (y luego opcionalmente verifique) el método en la clase de dependencia.
Deberías estar haciendo algo más como esto:
class MyClassTest
{
[TestMethod]
public void MyMethodTest()
{
string action = "test";
Mock<SomeClass> mockSomeClass = new Mock<SomeClass>();
mockSomeClass.Setup(mock => mock.DoSomething());
MyClass myClass = new MyClass(mockSomeClass.Object);
myClass.MyMethod(action);
// Explicitly verify each expectation...
mockSomeClass.Verify(mock => mock.DoSomething(), Times.Once());
// ...or verify everything.
// mockSomeClass.VerifyAll();
}
}
En otras palabras, usted está verificando que al invocar MyClass#MyMethod
, su clase definitivamente llamará SomeClass#DoSomething
una vez en ese proceso. Tenga en cuenta que no necesita el argumento Times
; Solo estaba demostrando su valor.