Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hamcrest matcher的冲突重载_Java_Overloading_Hamcrest - Fatal编程技术网

Java Hamcrest matcher的冲突重载

Java Hamcrest matcher的冲突重载,java,overloading,hamcrest,Java,Overloading,Hamcrest,matcher为静态工厂方法containsInAnyOrder有两个重载(都有返回类型matcher),它实际上匹配两个重载方法。我不确定为什么选择第一个方法,但您可以提供一个提示,让它选择正确的方法 通过将参数强制转换为集合: assertThat(Arrays.asList("foo","bar"), containsInAnyOrder((Collection)Arrays.asList(equalTo("foo"), equalTo("bar")))); 或者通过将泛

matcher为静态工厂方法containsInAnyOrder有两个重载(都有返回类型
matcher),它实际上匹配两个重载方法。我不确定为什么选择第一个方法,但您可以提供一个提示,让它选择正确的方法

通过将参数强制转换为
集合

assertThat(Arrays.asList("foo","bar"),
        containsInAnyOrder((Collection)Arrays.asList(equalTo("foo"), equalTo("bar"))));
或者通过将泛型类型T指定为
(但不要使用静态导入):

assertThat(Arrays.asList(“foo”、“bar”),
ISiterableContainingAnyOrder.containsInAnyOrder(Arrays.asList(equalTo(“foo”)、equalTo(“bar”));

当您匹配自己的对象而不是简单的字符串时,要得到泛型就更难了。如果您使用varargs
containsInAnyOrder(Matcher使用hamcrest 1.3,您可以使用
Matchers
类,而不是@eee提到的直接使用
IsiterableCainingAnyOrder
。Matchers实际上只是为您调用IsiterableCainingAnyOrder

import static org.hamcrest.core.IsEqual.equalTo;
import static org.junit.Assert.assertThat;

import org.hamcrest.Matchers;
import java.util.Arrays;
import org.junit.Test;

public class SomeTest
{
    @Test
    public void foo() {
        assertThat(Arrays.asList("foo","bar"), 
            Matchers.<OrderValidationStep>containsInAnyOrder("foo", "bar"));
    }
}
导入静态org.hamcrest.core.IsEqual.equalTo;
导入静态org.junit.Assert.assertThat;
导入org.hamcrest.Matchers;
导入java.util.array;
导入org.junit.Test;
公共类测试
{
@试验
公共图书馆{
资产(Arrays.asList(“foo”、“bar”),
Matchers.包含任何订单(“foo”、“bar”);
}
}

请注意,如果要
键入对containsInAnyOrder的调用,则不能使用静态导入,这样就不需要添加
@SuppressWarnings(“未选中”)

为了类型安全,我推荐第二个版本。此外,您可以编写
匹配器。containsInAnyOrder
而不是
IsiterableCainsinanyorder。containsInAnyOrder
。哇,
?super MyDTO
成功了。
?super Object
没有:)非常感谢!
Matcher<Iterable<? extends List<Matcher<String>>>>
assertThat(Arrays.asList("foo","bar"),
        containsInAnyOrder((Collection)Arrays.asList(equalTo("foo"), equalTo("bar"))));
assertThat(Arrays.asList("foo","bar"),
        IsIterableContainingInAnyOrder.<String>containsInAnyOrder(Arrays.asList(equalTo("foo"), equalTo("bar"))));
assertThat(myDTOList, 
    containsInAnyOrder(sameStateAs(expectedMyDTO1), sameStateAs(expectedMyDTO2));
Collection<Matcher<? super MyDTO>> expectedMyDTOs = 
    Arrays.<Matcher<? super MyDTO>>asList(sameStateAs(expectedMyDTO1), sameStateAs(expectedMyDTO2));

// Use like this:
assertThat(myDTOList, 
    containsInAnyOrder(expectedMyDTOs);
import static org.hamcrest.core.IsEqual.equalTo;
import static org.junit.Assert.assertThat;

import org.hamcrest.Matchers;
import java.util.Arrays;
import org.junit.Test;

public class SomeTest
{
    @Test
    public void foo() {
        assertThat(Arrays.asList("foo","bar"), 
            Matchers.<OrderValidationStep>containsInAnyOrder("foo", "bar"));
    }
}