如何在jUnit中将bundle与collectionassert进行比较?

时间:2013-09-23 17:29:46

标签: java junit assert assertions

我想确保以下bundles列表不包含使用jUnit断言方法的TestFramework包。

Bundle[] bundles = framework.getBundleContext().getBundles();

所以我想知道jUnit是否提供了任何这样的方法来比较捆绑包和List of Bundles?

2 个答案:

答案 0 :(得分:3)

只需遍历数组并使用assertEquals或assertFalse(假设您不想使用John B提到的ham)。

for (Bundle current : bundles)
{
    assertFalse(current instanceof TestFramework);
}

答案 1 :(得分:2)

使用Hamcrest

 Assert.assertThat(bundles, 
          CoreMatchers.not(
               IsArrayContaining.hasItemInArray(TestFramework)));

如果使用静态导入,则为:

 assertThat(bundles, not(hasItemInArray(myItem)));

如果您需要实例,可以使用:

 Assert.assertThat(bundles, 
          CoreMatchers.not(
               IsArrayContaining.hasItemInArray(
                    CoreMatchers.instanceOf(TestFramework.class))));

IsArrayContaining

仅供参考,我使用Assert.assertThat只是因为它更容易,但我更喜欢使用MatcherAssert.assertThat因为它提供了更好的错误文档。

编辑以响应DwB。我更喜欢Hamcrest,因为非Hamcrest解决方案有效,但在失败的情况下,除了expected false got true之外,您不会获得任何其他信息。这不会告诉您数组的哪个元素不符合条件或多个元素失败。一旦你去Hamcrest,你将永远不会回去。我再也不会使用assertTrueassertFalseassertEquals