在我的单元测试中,我想检查是否调用了一个或另一个方法。多亏了 Mockito,我可以很容易地验证某些方法被调用了多少次,但是 verify
没有像“OR”这样的验证模式。任何解决方法?
在我的例子中,我想检查 SharedPreferences.Editor
是否被调用了 .apply()
或 .commit()
因为两个这种可能性让我满意并节省了数据。不幸的是,如果我调用 verify(mEditor).apply()
但由于即时保存的要求,有人会将示例中的实现更改为 .commit()
,测试将失败,但不应该因为我只想从这个角度测试是否保存了数据。这是单元测试,应该独立于此类更改,并且仅检查内部测试内容的范围。
最佳答案
您要求的工作是捕获底层 MockitoAssertionError (或者只是 AssertionError
):
try {
verify(mEditor).apply();
} catch (MockitoAssertionError mae) {
// apply was not called. Let's verify commit instead.
verify(mEditor).commit();
}
或者,如果 apply
和 commit
都调用了一些(内部)save
方法,您也可以尝试验证(假设它已公开 - - 基于模拟的测试可能与信息隐藏不一致)。或者,如果您可以控制您正在测试的代码,您可以按照这些行重构它。
不过,更好的建议是完全避免这种需要,正如 answer by @GhostCat 中所论证的那样.
关于java - 如何在 Mockito 上验证满足多个条件中的一个?是否可以验证是否调用了一种或另一种方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55560689/