1

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

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

所以我想知道jUnit是否提供了任何这样的方法来比较一个包和包列表?

4

2 回答 2

3

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

for (Bundle current : bundles)
{
    assertFalse(current instanceof TestFramework);
}
于 2013-09-23T17:38:35.250 回答
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,你将永远不会回去。我从不使用assertTrueassertFalse或不再使用assertEquals

于 2013-09-23T17:35:39.033 回答