Java Mockito 模拟方法调用线程安全吗?

Woj*_*tek 5 java mockito

我正在编写单元测试来测试各个 Java 类的线程安全性。我使用 Mocktio 来设置测试并验证多线程环境中的交互是否按照预期完成,并且线程不会干扰业务预期。

Mockito 模拟在这种情况下是线程安全的吗?模拟方法是否可以被多个线程调用并且调用次数能够正确计数?

小智 8

不完全是。

在并行线程中调用方法并在Mockito.verify(..)中计算时间可能会在每次运行中产生不同的结果。

假设我们正在测试以下调用:

...
someListOfSize20.parallelStream().forEach(testedObject::methodToBeTested);
...
Run Code Online (Sandbox Code Playgroud)

并尝试验证:

Mockito.verify(testedObject, times(20)).methodToBeTested(any());
Run Code Online (Sandbox Code Playgroud)

这往往会因每次运行的调用次数不同而失败。

这是关于此问题的(仍然开放)票证: https ://github.com/mockito/mockito/issues/1037


Woj*_*tek 4

是的,他们是。引用mockito文档

(...)您可以让多个线程调用共享模拟上的方法以在并发条件下进行测试。