如何在代码中表达这个特殊的数组断言?

时间:2013-10-09 10:11:39

标签: java junit testng fest assertj

我目前正在使用FEST或AssertJ进行断言。 我遇到了一个想要断言流动阵列的结:

[1,2,2,2,2,2,2]

那么如何编写像

这样的断言
assertThat(arr).contains(1,atIndex(0)).containsTheOthers(2)

我在FEST中看不到包含其他人,或者我错过了相同的东西? 我有点惊讶FEST或者AssertJ无法断言从某个指定索引开始的索引范围,因为它们强调流畅简洁的断言代码。 还是有好的选择?

到目前为止,我必须将它分成两个断言并手动取出第一个要检查的元素,并且n取出其他要检查的,总共三行。那太乱了。

assertThat(arr[0]).contains(1,atIndex(0));
Arrays.copyOfRange(arr,1,arr.length);
assertThat(arr).containsOnly(2);

2 个答案:

答案 0 :(得分:4)

使用AssertJ,我会写:

assertThat(arr).containsExactly(1,2,2,2,2,2,2);

但请注意,它还会检查元素顺序。

仅供参考,AssertJ还提供了这些“包含”断言:

  • containsSequence
  • containsSubSequence
  • containsOnlyOnce

查看int array assertions javadoc

答案 1 :(得分:-1)

为什么复杂化?写这个的最简单方法是:

assertEquals(new int[]{1,2,2,2,2,2,2}, arr);

否则,如果可以有任意数量的2,那么将其分成两个断言的第二个解决方案似乎是明智的。