- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
有没有办法检查集合是否至少包含预期元素列表(e_1、e_2、...、e_m)中的 n 个元素(m >= n)?我正在考虑类似于 IterableSubject.containsAnyOf(e_1, e_2, ...)
的东西,这可以被视为 n = 1 的特殊情况。
最佳答案
目前,google-truth
中没有内置命题来验证Collection
是否至少包含一组候选元素中的 N 个元素。您可以通过查看 IterableSubject
中的可用方法来确定 Collection
命题的内置词汇表。 .
由于没有内置命题,因此您有两个主要选项可以在 google-truth
中执行断言:
isAtLeast
断言SubjectFactory
创建您自己的 Match-N 命题至 assertAbout
创建自己的命题需要更多工作,但会使您的测试更具可读性,并在测试失败时提供更好的消息。以下示例演示了这两个选项:
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.common.truth.FailureStrategy;
import com.google.common.truth.IterableSubject;
import com.google.common.truth.SubjectFactory;
import org.junit.Test;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
import java.util.stream.StreamSupport;
import static com.google.common.collect.Sets.newHashSet;
import static com.google.common.truth.Truth.assertAbout;
import static com.google.common.truth.Truth.assertThat;
public class ContainsAtLeastTest {
List<Integer> haystack = ImmutableList.of(1, 2, 3, 1, 2, 3);
@Test
public void COUNT_YOURSELF_haystack_contains_at_least_two_needles() {
// No built-in way to match-N elements, so you can match yourself then compare.
// This is easier to implement initially, but doesn't look as nice and gives not-so-great failure messages.
Set<Integer> needles = ImmutableSet.of(0, 1, 2);
long theNumberOfContainedElements = haystack.stream().distinct().filter(needles::contains).count();
assertThat(theNumberOfContainedElements).isAtLeast(2L);
}
@Test
public void CUSTOM_PROPOSITION_haystack_contains_at_least_two_needles() {
// If this is something that you test often, or if you just want the test to be more readable,
// it could be worth adding your own match-N proposition.
// You can word your own propositions however you like to maximize readability.
// The assertAbout method is google-truth's hook into extending the built-in testing vocabulary.
// You can define your own propositions by providing your own Subject class
// (which is just a set of possible propositions about something) and a SubjectFactory.
assertAbout(An.<Integer>iterable()).that(haystack).hasAtLeast(2).elementsFrom(1, 3, 5);
}
// Wrapping with "An" allows specifying the Iterable's generic type in a readable way.
static class An {
// assertAbout will use our factory that returns our own Subject
static <T> SubjectFactory<ExtendedIterableSubject<T>, Iterable<T>> iterable() {
return new SubjectFactory<ExtendedIterableSubject<T>, Iterable<T>>() {
@Override
public ExtendedIterableSubject<T> getSubject(FailureStrategy fs, Iterable<T> target) {
return new ExtendedIterableSubject<>(fs, target);
}
};
}
// We extend from IterableSubject so we don't lose the built-in vocabulary
static class ExtendedIterableSubject<T> extends IterableSubject<ExtendedIterableSubject<T>, T, Iterable<T>> {
ExtendedIterableSubject(FailureStrategy failureStrategy, Iterable<T> list) {
super(failureStrategy, list);
}
// Alternatively, we could directly define a proposition hasAtLeastTwoOf(T... elements),
// but it's nicer if min is a parameter.
IterableWithMin hasAtLeast(int min) {
return new IterableWithMin(min);
}
// Don't make this inner class extend Subject, because when starting with hasAtLeast(N),
// the language of the test will only make sense if it's followed by a method defined here.
// This keeps the API fluent by limiting the vocabulary.
class IterableWithMin {
int min;
IterableWithMin(int min) {
this.min = min;
}
@SafeVarargs final void elementsFrom(T... instances) {
// The actual match-N translated into a fluent hasAtLeast(N).elementsFrom(e1, e2, ..., eM) form.
Set<T> instanceSet = newHashSet(instances);
long numContainedElements = StreamSupport.stream(getSubject().spliterator(), false).distinct().filter(instanceSet::contains).count();
if (numContainedElements < min) {
fail(String.format("contains at least %d elements from", min), Arrays.asList(instances));
}
}
}
}
}
}
关于java - 如何检查 Collection 是否至少包含 google-truth 中的 N 个匹配元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36901211/
我有一个 if 语句,如下所示 if (not(fullpath.lower().endswith(".pdf")) or not (fullpath.lower().endswith(tup
然而,在 PHP 中,可以: only appears if $foo is true. only appears if $foo is false. 在 Javascript 中,能否在一个脚
XML有很多好处。它既是机器可读的,也是人类可读的,它具有标准化的格式,并且用途广泛。 它也有一些缺点。它是冗长的,不是传输大量数据的非常有效的方法。 XML最有用的方面之一是模式语言。使用模式,您可
由于长期使用 SQL2000,我并没有真正深入了解公用表表达式。 我给出的答案here (#4025380)和 here (#4018793)违背了潮流,因为他们没有使用 CTE。 我很欣赏它们对于递
我有一个应用程序: void deleteObj(id){ MyObj obj = getObjById(id); if (obj == null) { throw n
我的代码如下。可能我以类似的方式多次使用它,即简单地说,我正在以这种方式管理 session 和事务: List users= null; try{ sess
在开发J2EE Web应用程序时,我通常会按以下方式组织我的包结构 com.jameselsey.. 控制器-控制器/操作转到此处 服务-事务服务类,由控制器调用 域-应用程序使用的我的域类/对象 D
这更多是出于好奇而不是任何重要问题,但我只是想知道 memmove 中的以下片段文档: Copying takes place as if an intermediate buffer were us
路径压缩涉及将根指定为路径上每个节点的新父节点——这可能会降低根的等级,并可能降低路径上所有节点的等级。有办法解决这个问题吗?有必要处理这个吗?或者,也许可以将等级视为树高的上限而不是确切的高度? 谢
我有两个类,A 和 B。A 是 B 的父类,我有一个函数接收指向 A 类型类的指针,检查它是否也是 B 类型,如果是将调用另一个函数,该函数接受一个指向类型 B 的类的指针。当函数调用另一个函数时,我
有没有办法让 valgrind 使用多个处理器? 我正在使用 valgrind 的 callgrind 进行一些瓶颈分析,并注意到我的应用程序中的资源使用行为与在 valgrind/callgrind
假设我们要使用 ReaderT [(a,b)]超过 Maybe monad,然后我们想在列表中进行查找。 现在,一个简单且不常见的方法是: 第一种可能性 find a = ReaderT (looku
我的代码似乎有问题。我需要说的是: if ( $('html').attr('lang').val() == 'fr-FR' ) { // do this } else { // do
根据this文章(2018 年 4 月)AKS 在可用性集中运行时能够跨故障域智能放置 Pod,但尚不考虑更新域。很快就会使用更新域将 Pod 放入 AKS 中吗? 最佳答案 当您设置集群时,它已经自
course | section | type comart2 : bsit201 : lec comart2 :
我正在开发自己的 SDK,而这又依赖于某些第 3 方 SDK。例如 - OkHttp。 我应该将 OkHttp 添加到我的 build.gradle 中,还是让我的 SDK 用户包含它?在这种情况下,
随着 Rust 越来越充实,我对它的兴趣开始激起。我喜欢它支持代数数据类型,尤其是那些匹配的事实,但是对其他功能习语有什么想法吗? 例如标准库中是否有标准过滤器/映射/归约函数的集合,更重要的是,您能
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 9 年前。 Improve
我一直在研究 PHP 中的对象。我见过的所有示例甚至在它们自己的对象上都使用了对象构造函数。 PHP 会强制您这样做吗?如果是,为什么? 例如: firstname = $firstname;
...比关联数组? 关联数组会占用更多内存吗? $arr = array(1, 1, 1); $arr[10] = 1; $arr[] = 1; // <- index is 11; does the
我是一名优秀的程序员,十分优秀!