Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.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 如何处理测试用例中集合的随机顺序?_Java_Unit Testing - Fatal编程技术网

Java 如何处理测试用例中集合的随机顺序?

Java 如何处理测试用例中集合的随机顺序?,java,unit-testing,Java,Unit Testing,在我的测试用例中,我使用assertEquals()进行单元测试。问题是这个断言的值来自哈希集,其中的顺序是随机的。因此,每次运行测试用例时,由于HashSet的字符串表示值不同,我的断言可能会失败 为了解决这个问题,我正在考虑在代码中使用LinkedHashSet,但这似乎不是一个有效的解决方案,因为LinkedHashSet的选择只是为了适应一些测试用例 这是单元测试中的常见情况吗?不要比较哈希集的toString(),而是将其与另一个(预期的)哈希集进行比较 以下测试将成功: @Test

在我的测试用例中,我使用assertEquals()进行单元测试。问题是这个断言的值来自哈希集,其中的顺序是随机的。因此,每次运行测试用例时,由于HashSet的字符串表示值不同,我的断言可能会失败

为了解决这个问题,我正在考虑在代码中使用LinkedHashSet,但这似乎不是一个有效的解决方案,因为LinkedHashSet的选择只是为了适应一些测试用例


这是单元测试中的常见情况吗?

不要比较
哈希集的
toString()
,而是将其与另一个(预期的)
哈希集进行比较

以下测试将成功:

@Test
public void test() {

    Set<Integer> set = new HashSet<Integer>(Arrays.asList(2, 1, 3));
    Set<Integer> expected = new HashSet<Integer>(Arrays.asList(3, 2, 1));

    assertEquals(set, expected);
}
@测试
公开无效测试(){
Set=newhashset(Arrays.asList(2,1,3));
Set expected=newhashset(Arrays.asList(3,2,1));
assertEquals(设置,预期);
}

不要比较一个
哈希集的
toString()
,而是将它与另一个(预期的)
哈希集进行比较

以下测试将成功:

@Test
public void test() {

    Set<Integer> set = new HashSet<Integer>(Arrays.asList(2, 1, 3));
    Set<Integer> expected = new HashSet<Integer>(Arrays.asList(3, 2, 1));

    assertEquals(set, expected);
}
@测试
公开无效测试(){
Set=newhashset(Arrays.asList(2,1,3));
Set expected=newhashset(Arrays.asList(3,2,1));
assertEquals(设置,预期);
}
每次运行测试用例时,由于
HashSet
的字符串表示值不同,我的断言可能会失败

这意味着您不应该使用
哈希集的“原始”字符串表示形式

如果您想坚持比较字符串表示,请获取无序散列集,对其进行排序,然后获取结果的字符串表示。创建用于将哈希集转换为有序集组件字符串的帮助器方法:

static <T extends Comparable<T>> String ordered(Set<T> set) {
    return set.stream().sorted().map(Object::toString).collect(Collectors.joining(", "));
}

每次运行测试用例时,由于
HashSet
的字符串表示值不同,我的断言可能会失败

这意味着您不应该使用
哈希集的“原始”字符串表示形式

如果您想坚持比较字符串表示,请获取无序散列集,对其进行排序,然后获取结果的字符串表示。创建用于将哈希集转换为有序集组件字符串的帮助器方法:

static <T extends Comparable<T>> String ordered(Set<T> set) {
    return set.stream().sorted().map(Object::toString).collect(Collectors.joining(", "));
}

JUnit 5

测试集合是否包含一个(或多个)值,不考虑顺序:

import static org.assertj.core.api.Assertions.assertThat;
类OrderUpdateHelperTest{
@试验
void testSetUnorderedContents(){
设置expectedTypes=Helper.getExpectedTypes(OrderStatus.IN\u PROGRESS);
assertThat(expectedTypes).ContainesExactlyInYorder(EventType.A,EventType.B);
}

JUnit5

测试集合是否包含一个(或多个)值,不考虑顺序:

import static org.assertj.core.api.Assertions.assertThat;
类OrderUpdateHelperTest{
@试验
void testSetUnorderedContents(){
设置expectedTypes=Helper.getExpectedTypes(OrderStatus.IN\u PROGRESS);
assertThat(expectedTypes).ContainesExactlyInYorder(EventType.A,EventType.B);
}

您能提供一些代码吗?如果哈希集大小相同,并且包含相同的成员,则哈希集是相等的。请参阅。字符串表示与比较
s是否相等有什么关系?请提供一个。当然,这些问题可以解决。但不是这样的输入。我们这里没有向导。您能提供一些代码吗?哈希如果ets大小相同,并且包含相同的成员,则它们是相等的。请参阅。字符串表示与比较
Set
s是否相等有什么关系?请提供一个。当然,这些问题可以解决。但不是这样的输入。我们这里没有向导。OP不是在询问如何比较集合是否相等吗?“这个断言的值来自一个
HashSet
“那么?就断言集合的相等。顺序与此无关。@LewBloch这当然是一种方法。和大多数编程方法一样,它不是唯一有效的方法。OP不是在问如何比较集合的相等性吗?”此断言的值来自
HashSet
“那么?就断言集合的相等性吧。顺序与此无关。@LewBloch这当然是一种方法。与大多数编程方法一样,它不是唯一有效的方法。在我的例子中,我必须断言矩阵类的集合为某个值,并且很难创建“预期”值。”要比较的哈希集。对我来说,比较字符串是最方便的方法。在我的情况下,我必须将矩阵类的一组断言为某个值,并且很难创建要比较的“预期”哈希集。对我来说,比较字符串是最方便的方法。