单元测试 – 使用Moq设置测试的更好方法
发布时间:2020-12-14 04:53:24 所属栏目:百科 来源:网络整理
导读:我一直在嘲笑使用moq一段时间,并总是发现自己做这样的事情: 假设我想测试的行为是classUnderTest.DoSomething()调用l.Fatal(“我的测试消息”)一次. //arrangemockLogger.Setup(l = l.Fatal("My test message"));//actclassUnderTest.DoSomething()//assert
我一直在嘲笑使用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()); 我觉得验证调用总是重复设置,除了Times参数.即使使用不同的模拟框架,我也想知道其他人在做什么.有一个更好的方法吗? 解决方法
如果你真的需要控制它的行为,你只需要在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()); 这就是你所需要的 – 验证所有繁重的工作,没有理由调用设置. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |