java - 检查元素是否验证条件

标签 java unit-testing java-8 mockito

我有一个对象列表。我想知道是否调用了某些对象方法。

即:

List<Object> list = ...;
Object first = spy(new Object());
Object second = spy(new Object());
list.add(first);
list.add(second);

callToStringToOnlyOneRandomElement(list);

我想知道如何进行验证部分。如果发生这种情况,则测试正常:

verify(first, times(1)).toString();
verify(second, never()).toString();

异或如果发生这种情况:

verify(first, never()).toString();
verify(second, times(1)).toString();

但在其他情况下不会(如果调用了 first.toString()second.toString(), 或者如果两者都没有被调用)。

For context: The real problem involves threads and race conditions. I want to know if 10 elements are processed directly, and if all the other elements goes to a private queue. Because the calls happens concurrently, there is no order in which elements of the array are processed directly (that's the expected behavior).

目前,我使用的是 Mockito 1.9

最佳答案

一般来说,线程的行为不应该成为单元测试的主题。 结果可能会有很大差异,集成测试套件更适合这种场景。

如果确实需要,您需要在同一测试方法中考虑这两个选项。您不能将mockito verify 调用与逻辑运算符的使用结合起来,但有一个解决方法是:

boolean firstOptionFail = false;

try{
   verify(first, times(1)).toString();
   verify(second, never()).toString();      
}catch (MockitoException e) {
    firstOptionFail = true;
}

if(firstOptionFail){
  verify(first, never()).toString();
  verify(second, times(1)).toString();
}

关于java - 检查元素是否验证条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48142672/

相关文章:

java - 我从 Web 浏览器中的 url 加载 html 的方法不起作用

java - Jackson - 反序列化嵌套的 JSON

java - Java:HashMap.getOrDefault返回空值

objective-c - 延迟 XCTest 中所有单元测试的执行

java - 如何使用 Java 8 中的比较器按参数对流进行排序?

java - 我安装了 JRE 和 JDK 8,但在 Eclipse 中它显示 Java/JavaVirtualMachines/1.6.0 JDK。该怎么办?

java - 具有通用 throw 子句的 Lambda 和功能接口(interface)

java - 挂载和卸载硬盘

javascript - Jest 在第一次失败后停止执行期望语句

javascript - AngularJS 和 Karma-Jasmine - 如果 verifyNoOutstandingExpectation() 不工作;或 verifyNoOutstandingRequest();独立