我使用Mockito测试的几种方法进行了JUnit测试。我对EasyMock有很多经验(虽然不是最近的)所以我就这样组织了它:
@Before
public void before() {
myAPI = mock(MyAPI.class);
}
@After
public void after() {
verify(myAPI);
reset(myAPI);
}
如果需要,方法会在mock上注册一些调用。
但我有一个例外:
org.mockito.exceptions.misusing.UnfinishedVerificationException: 缺少方法调用验证(模拟): - > at de.datev.shared.spdvz.util.UserInfoUtilTest.after(UserInfoUtilTest.java:45)
正确验证的示例: 验证(模拟).doSomething()
我知道我可以做verify(myAPI).doSomething(someArgs)
但是:
when
如果when
上注册的所有方法都被实际调用,是否有任何方法可以简单验证? EasyMock以这种方式工作,非常方便......
答案 0 :(得分:0)
如果我有很多完全的调用,我只需使用commonMocking方法,将验证放在那里并在需要时重复使用。然后我将verfies保留在实际测试中 - 这个也使得每个测试用例之间的实际差异更加可读。
答案 1 :(得分:0)
我认为这是不可能的。 Here是一个古老的讨论,其中两位维护者正在陈述他们对此类功能的看法。 讨论已经很久了,但据我所知,目前的Mockito版本仍然没有支持。
在Mockito验证是明确的。所以你基本上验证(断言) 如果某个特定的调用已经发生,那么它已经发生了 你可以选择要检查的重要内容。 Mockito在顽固和嘲弄之间也有更强的分离 功能。因此,它允许您存根一些调用以使代码通过 你想要的路径没有验证呼叫已经发生。 此外,除非您有,否则您没有义务进行子调用 很高兴Mockito为您提供默认值。
这种方法将测试设置逻辑与测试验证逻辑分开 更好的提高可读性。
和
关于为什么mockito不能促进验证存根方法的几句话。
简化。在过去,当模拟框架广为人知时,我们一直在手写我们的存根。但是我不记得我们想要验证存根实际被调用的单个案例。原因很简单:存根方法被隐式验证:存根值在处理中是必不可少的。
- 醇>
我看到测试中没有分开短路和期待'实际上是有害的。开发人员增加了返回值期望,因为模拟了UnexpectedOperation。但是他没有检查mock返回的值是否真的被使用了...简化存根会使重点变得更有趣:如果正确使用了存根值。