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, mas public void SomeMehod()
não é. O objetivo é encontrar a maneira de zombar e de alguma forma invocar esse método e, em seguida, usar a CallBase
propagação da chamada para o SomeOtherMethod()
. Pode parecer um hack, mas é simples em essência. Pode ser usado no caso se a refatoração proposta não for possível.
// This class is used only for test and purpose is make SomeMethod mockable
public abstract class DummyClass : SomeClass
{
public virtual void DummyMethod() => base.SomeMethod();
}
Em seguida, você pode configurar DummyMethod()
para propagar a chamada definindo CallBase
sinalizador.
//Arrange
var mock = new Mock<DummyClass>();
mock.Setup(m => m.DummyMethod()).CallBase();
//Act
mock.Object.SomeMethod();
//Assert
mock.Verify(m => m.SomeOtherMethod(), Times.Once);