如果您确实需要控制 Mock 对象的行为,例如返回内容,则只需对 Mock 对象进行设置:
_mockRepo.SetUp(m => m.DoStuff()).Returns(someObject);
或抛出异常:
_mockRepo.SetUp(m => m.DoStuff()).Throws(new SomeExceptionType());
我假设,在您的示例中,您将 logger 模拟对象传递给其他正在测试的对象,在这种情况下,删除 setup 调用将不起作用,因为只需创建 Mock 对象即可完成等效设置。
编辑
public class Dude : IDude
{
private IAirSupport _support;
public Dude(IAirSupport support)
{
_support = support;
}
public void Advance(Place place)
{
if(place.IsUnderAttack)
{
_support.CoveringFire(place);
MoveAndFire(place);
}
}
}
模拟这个:
var support = new Mock<IAirSupport>();
var dude = new Dude(support.Object);
var place = new HotSpot { IsUnderFire = true };
dude.Advance(place);
support.Verify(m => m.CoveringFire(place), Times.Once());
这就是您所需要的 - 验证完成所有繁重的工作,无需调用设置。