java - Mockito 验证字符串集合

标签 java junit mockito hamcrest

我想验证一个准确的 Collection 是否传递给了模拟方法。 这就是我尝试这样做的方式:

This is a simple example of my real code, which reproduce exactly the same problem.

import com.google.common.collect.Lists;
import org.hamcrest.Matchers;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import org.mockito.hamcrest.MockitoHamcrest;

import java.util.Collection;

public class MockTest {

    @Test
    void mockTest() {

        final Collection<String> collection = Mockito.mock(Collection.class);

        collection.addAll(Lists.newArrayList("hello"));

        Mockito.verify(collection).addAll(MockitoHamcrest.argThat(Matchers.contains("hello")));
    }
}

但它不起作用,我得到了这个编译错误:

Error:(20, 35) java: incompatible types: inference variable T has incompatible bounds
    equality constraints: java.lang.Iterable<? extends E>
    lower bounds: java.util.Collection<? extends java.lang.String>,java.lang.Object

关于为什么它不起作用或我如何以不同的方式做它的任何想法?

最佳答案

你能试试下面的代码吗

@Test
public void mockTest() {

    final Collection<String> collection = Mockito.mock(Collection.class);

    collection.addAll(Lists.newArrayList("hello"));

    Mockito.verify(collection).addAll((Collection<? extends String>) MockitoHamcrest.argThat(Matchers.contains("hello")));
}

关于java - Mockito 验证字符串集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53043801/

相关文章:

java - hibernate 找不到序列

java - Mockito ArgumentCaptor 在验证时不返回任何值

java - void 方法的单元测试应该是什么样子?

java - 如何针对每个测试对应的多个数据集动态识别和运行 JUnit 测试用例

java - 模拟对象并将它们分配给方法中的实例变量和静态变量

java - 将 PowerMockRunner 与 LocalDate 类一起使用来模拟今天的日期

java - @Mock jpaRepository 调用真实的保存方法 @MockBean 调用模拟方法

java - JMS 队列接收消息?

java - 将 double (或 float )转换为整数时会发生什么?

java - 如何在 Java 中实现 .group() 正则表达式