У вас возникла эта проблема, потому что вы издеваетесь над тем, что тестируете. Это не имеет смысла.
Вы правы, что Moq заменит реализацию вашего метода своей собственной. Причина в том, что вы должны использовать Moq для насмешки над классом , который вы тестируете , а не над классом, который вы тестируете сами.
Этот тест был бы уместен, если бы ваш код был разработан таким образом:
public class ClassA
{
BusinessLogicClass bl;
public ClassA(BusinessLogicClass bl)
{
this.bl = bl;
}
public void Save()
{
bl.ShouldBeCalled();
}
}
public class BusinessLogicClass
{
public virtual void ShouldBeCalled()
{
//This should get executed
}
}
И вот правильный тест этого метода сейчас:
[TestFixture]
public class ClassA_Test
{
[Test]
public void Save_ShouldCallShouldBeCalled()
{
//Arrange
var mockBLClass = new Mock<BusinessLogicClass>();
mockBLClass.Setup(x => x.ShouldBeCalled()).Verifyable();
//Act
ClassA classA = new ClassA(mockBLClass.Object);
classA.Save();
//Assert
mockBLClass.VerifyAll();
}
}
Ключевым уроком здесь является то, что вы имитируете / заглушаете то, что нужно для выполнения теста , а не то, что вы тестируете сами.
Надеюсь, это поможет,
Anderson