我一直在嘲笑使用moq一段时间,并总是发现自己做这样的事情:
假设我想测试的行为是classUnderTest.DoSomething()调用l.Fatal(“我的测试消息”)一次.
//arrange mockLogger.Setup(l => l.Fatal("My test message")); //act classUnderTest.DoSomething() //assert mockLogger.Verify(l => l.Fatal("My test message"),Times.Once());
解决方法
如果你真的需要控制它的行为,你只需要在Mock对象上进行设置,比如返回东西:
_mockRepo.SetUp(m => m.DoStuff()).Returns(someObject);
或抛出异常:
_mockRepo.SetUp(m => m.DoStuff()).Throws(new SomeExceptionType());
我假设,在您的示例中,您将记录器模拟对象传递给其他正在测试的对象,在这种情况下,删除设置调用将不起作用,因为等效设置将仅通过创建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());
这就是你所需要的 – 验证所有繁重的工作,没有理由调用设置.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。