Utilizando un simulacro para una interfaz.
Digamos que tienes tu clase ImplClass
que utiliza la interfaz Finder
y quiere asegurarse de que la función se llama a Search
con el argumento "hola";
Así tenemos:
public interface Finder
{
public string Search(string arg);
}
y
public class ImplClass
{
public ImplClass(Finder finder)
{
...
}
public void doStuff();
}
entonces usted puede escribir una maqueta para su código de prueba
private class FinderMock : Finder
{
public int numTimesCalled = 0;
string expected;
public FinderMock(string expected)
{
this.expected = expected;
}
public string Search(string arg)
{
numTimesCalled++;
Assert.AreEqual(expected, arg);
}
}
entonces el código de prueba:
FinderMock mock = new FinderMock("hello");
ImplClass impl = new ImplClass(mock);
impl.doStuff();
Assert.AreEqual(1, mock.numTimesCalled);
¿Funciona esto cuando Calc no es abstracto o interfaz? Por lo que sé, 'Moq' hace proxies dinámicos para hacer que sus burlas no generen nuevas instrucciones IL para que esto sea posible ... – kuskmen