gpt4 book ai didi

hamcrest - 在 AssertJ 中测试一件事成立还是另一件事成立

转载 作者:行者123 更新时间:2023-12-03 14:35:10 27 4
gpt4 key购买 nike

我正在将一些测试从 Hamcrest 转换为 AssertJ。在 Hamcrest 中,我使用以下代码段:

assertThat(list, either(contains(Tags.SWEETS, Tags.HIGH))
.or(contains(Tags.SOUPS, Tags.RED)));

也就是说,列表可以是那个或那个。我如何在 AssertJ 中表达这一点? anyOf函数(当然,any 不是任何一个,但这将是第二个问题)需要 Condition ;我自己已经实现了,但感觉好像这应该是一个常见的情况。

最佳答案

编辑:

自 3.12.0 AssertJ 提供 satisfiesAnyOf 哪个成功是给定的断言之一成功,

assertThat(list).satisfiesAnyOf(
listParam -> assertThat(listParam).contains(Tags.SWEETS, Tags.HIGH),
listParam -> assertThat(listParam).contains(Tags.SOUPS, Tags.RED)
);

原答案:

不,这是 Hamcrest 比 AssertJ 更好的领域。

要编写以下断言:

Set<String> goodTags = newLinkedHashSet("Fine", "Good");
Set<String> badTags = newLinkedHashSet("Bad!", "Awful");
Set<String> tags = newLinkedHashSet("Fine", "Good", "Ok", "?");

// contains is statically imported from ContainsCondition
// anyOf succeeds if one of the conditions is met (logical 'or')
assertThat(tags).has(anyOf(contains(goodTags), contains(badTags)));

您需要创建此条件:

import static org.assertj.core.util.Lists.newArrayList;    
import java.util.Collection;
import org.assertj.core.api.Condition;

public class ContainsCondition extends Condition<Iterable<String>> {
private Collection<String> collection;

public ContainsCondition(Iterable<String> values) {
super("contains " + values);
this.collection = newArrayList(values);
}

static ContainsCondition contains(Collection<String> set) {
return new ContainsCondition(set);
}

@Override
public boolean matches(Iterable<String> actual) {
Collection<String> values = newArrayList(actual);
for (String string : collection) {
if (!values.contains(string)) return false;
}
return true;
};
}

如果您期望您的标 checkout 现在一个集合中意味着它们不在另一个集合中,那么这可能不是您想要的。

关于hamcrest - 在 AssertJ 中测试一件事成立还是另一件事成立,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26733985/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com