Aunque estoy de acuerdo en que la respuesta de @ Paul es el camino recomendado, solo quiero agregar un camino alternativo proporcionado por moq
uno mismo.
Dado que SomeClass
es abstract
de hecho es mockable, pero public void SomeMehod()
no lo es. El punto es encontrar la manera de burlarse y de alguna manera invocar ese método y luego usar CallBase
propagar la llamada al SomeOtherMethod()
. Puede sonar como un truco, pero en esencia es simple. Podría usarse en el caso si la refactorización propuesta no es posible.
// This class is used only for test and purpose is make SomeMethod mockable
public abstract class DummyClass : SomeClass
{
public virtual void DummyMethod() => base.SomeMethod();
}
Luego, puede configurar DummyMethod()
para propagar la llamada configurando el CallBase
indicador.
//Arrange
var mock = new Mock<DummyClass>();
mock.Setup(m => m.DummyMethod()).CallBase();
//Act
mock.Object.SomeMethod();
//Assert
mock.Verify(m => m.SomeOtherMethod(), Times.Once);