Entendo que posso testar se 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();
}
Quero testar se, se eu ligar SomeMethod()
, espero que SomeOtherMethod()
isso seja chamado.
Estou certo ao pensar que esse tipo de teste está disponível em uma estrutura de simulação?
Não, o teste simulado pressupõe 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
eSomeOtherMethod
deve ser implementado em outra entidade que precisa ser conectada.O seu
Someclass
construtor seria semelhanteNew(ISomeOtherClass)
. Em seguida, você zombariaISomeOtherClass
e definiria a expectativaSomeOtherMethod
de ser chamado e verificaria a expectativa.fonte
Embora eu concorde que a resposta do @ Paul é o caminho recomendado, eu só quero adicionar um caminho alternativo que é fornecido por você
moq
mesmo.Desde
SomeClass
éabstract
que é realmente mockable, maspublic void SomeMehod()
não é. O objetivo é encontrar a maneira de zombar e de alguma forma invocar esse método e, em seguida, usar aCallBase
propagação da chamada para oSomeOtherMethod()
. Pode parecer um hack, mas é simples em essência. Pode ser usado no caso se a refatoração proposta não for possível.Em seguida, você pode configurar
DummyMethod()
para propagar a chamada definindoCallBase
sinalizador.fonte