Usando Moq para determinar si se llama un método

Tengo entendido que puedo probar que se realizará una llamada al método si invoco un método de nivel superior, es decir:

public abstract class SomeClass() { public void SomeMehod() { SomeOtherMethod(); } internal abstract void SomeOtherMethod(); } 

Quiero probar que si llamo SomeMethod() entonces espero que se SomeMethod() .

¿Estoy en lo cierto al pensar que este tipo de prueba está disponible en un marco de burla?

Puede ver si un método en algo que se ha burlado se ha llamado mediante Verificar, por ejemplo:

 static void Main(string[] args) { Mock mock = new Mock(); ClassBeingTested testedClass = new ClassBeingTested(); testedClass.WorkMethod(mock.Object); mock.Verify(m => m.MethodToCheckIfCalled()); } class ClassBeingTested { public void WorkMethod(ITest test) { //test.MethodToCheckIfCalled(); } } public interface ITest { void MethodToCheckIfCalled(); } 

Si la línea se deja comentada arrojará una excepción MockException cuando llame a Verificar. Si no está comentado, pasará.

No, las pruebas simuladas presuponen que está utilizando ciertos patrones de diseño comprobables, uno de los cuales es la inyección. En su caso, estaría probando SomeClass.SomeMethod . SomeClass.SomeMethod y SomeClass.SomeMethod deben implementarse en otra entidad que necesite interconexión.

Su constructor Someclass se vería como New(ISomeOtherClass) . Luego se burlaría de ISomeOtherClass y establecería la expectativa en su SomeOtherMethod para que se le llame y verificará las expectativas.