📌  相关文章
📜  错误:方法 assertThat(T, Matcher<? super T> ) 类型中的 MatcherAssert 不适用于参数 (List<String> , 匹配器<Iterable<Integer> &gt;) - TypeScript (1)

📅  最后修改于: 2023-12-03 15:12:34.137000             🧑  作者: Mango

错误:方法 assertThat(T, Matcher<? super T>) 类型中的 MatcherAssert 不适用于参数 (List, 匹配器<Iterable>)

当我们在进行Java编码时,有时候会遇到该错误。这是由于我们使用了错误的参数类型而导致的。

问题分析

Java中的assertThat方法期望的参数类型是TMatcher<? super T>,其中T是要进行断言的类型,Matcher<? super T>是一个断言匹配器。然而,在本例中,我们将List作为第一个参数传递给该方法,将匹配器Matcher<Iterable<Integer>>传递给了第二个参数。

这显然是不对的,因为List与Iterable不匹配。这就是为什么编译器会告诉我们这个错误。

解决方案

要解决这个问题,我们需要确保我们提供的参数类型与assertThat方法所期望的类型匹配。

在这种情况下,我们需要使用Matcher<Iterable<String>>而不是Matcher<Iterable<Integer>>。这是因为我们正在对一个String列表进行断言,而不是一个整数列表。

因此,修复该错误的代码应该类似于下面的示例:

import org.hamcrest.MatcherAssert;
import org.hamcrest.Matchers;
import org.junit.Test;

import java.util.Arrays;
import java.util.List;

public class MyTest {
    
    @Test
    public void myTest() {
        List<String> myList = Arrays.asList("hello", "world");
        MatcherAssert.assertThat(myList, Matchers.containsInAnyOrder("hello", "world"));
    }
}

在这个例子中,我们修改了第二个参数的类型,从Matcher<Iterable<Integer>>改为Matcher<Iterable<String>>,使得它和参数List<String>保持一致。

这样,我们就解决了这个错误并成功运行了测试用例。