【发布时间】:2018-11-03 08:23:46
【问题描述】:
我有一点逻辑需要测试,比如:
{
...
A.add("1");
...
A.add("what ever");
...
A.add("2");
A.delete("5");
...
}
我已经在我的测试中模拟了 A,我可以测试 add 方法在参数(“2”)上调用一次,例如:
Mockito.verify(mockedA).add("2");
我的问题是如何测试我是否可以验证对方法 add 的最后调用是 add("2") 而不是其他参数。
由于上面的测试无法捕捉到是否有人在最后一个意外添加了另一个调用,例如 add("3")。请注意,之后我们不再关心 A 上的其他方法调用。我们也不关心方法调用的次数,方法调用的顺序。 这里的关键是我们是否可以验证某个 mockedObject 的某个方法上的最后一个 true 参数。
如果你问为什么需要这样的功能,我会说在现实世界中我们可能需要处理一些设置某些东西并且最后一组获胜的逻辑,并且为了避免有人意外设置其他一些意想不到的东西并且我想用我们的 UT 来捕捉这个。而且为了不让测试过于复杂和整洁,所以我只希望验证对象的某个方法的最后一次调用,而不是验证诸如 order/noMoreInteractions/AtMostTimes 之类的东西。
【问题讨论】:
-
见stackoverflow.com/questions/8504074/…>,也许你会觉得有帮助。
-
谢谢,这很有帮助。