Usando o Moq para determinar se um método é chamado

No meu entender, posso testar que uma chamada de método ocorrerá se eu chamar um método de nível superior, ou seja:

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

Eu quero testar isso se eu chamar SomeMethod() então espero que SomeOtherMethod() será chamado.

Estou certo em pensar que este tipo de teste está disponível em uma estrutura de zombaria?

Você pode ver se um método em algo que você tenha zombado foi chamado usando Verificar, por exemplo:

 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(); } 

Se a linha for deixada comentado, ela lançará um MockException quando você chamar Verify. Se não estiver completo, passará.

Não, o teste simulado presume que você esteja usando determinados padrões de design testáveis, um dos quais é a injeção. No seu caso, você estaria testando SomeClass.SomeMethod e SomeOtherMethod devem ser implementados em outra entidade que precisa ser interfaceada.

Seu construtor Someclass seria semelhante a New(ISomeOtherClass) . Então você iria zombar do ISomeOtherClass e definir a expectativa em seu SomeOtherMethod para ser chamado e verificar a expectativa.