Tag: hamcrest

Ant + JUnit:NoClassDefFoundError

好的,我很沮丧! 我已经狩猎了好几个小时,我仍然难过。 环境:WinXP,Eclipse Galileo 3.5(直接安装 – 无需额外插件)。 所以,我有一个简单的JUnit测试。 它从内部Eclipse JUnit运行配置运行良好。 这个类没有依赖任何东西。 要尽可能缩小此问题,它只包含: @Test public void testX() { assertEquals(“1”, new Integer(1).toString()); } 到目前为止没有汗水。 现在我想采取从Ant内部运行此测试用例的超级高级步骤(最终目标是与Hudson集成)。 所以,我创建了一个build.xml: $ {basedir}是工作空间中包含源,类和构建文件的Java项目名称。 所有.java和build.xml都在$ {basedir} / src中。 .class文件位于$ {basedir} / bin中。 我已经通过Windows / Preferences / Ant / Runtime / Contributed Entries将eclipse-install-dir / plugins / org.junit4_4.5.0.v20090423 / junit.jar添加到Ant运行时类路径中。 ant-junit.jar在Ant Home Entries中。 那么,当我运行这个疯狂复杂的目标时会发生什么? 我的报告文件包含: […]

org.junit.Assert.assert是否比org.hamcrest.MatcherAssert.assert更好?

我是JUnit和Hamcrest的新手,并希望获得最佳实践建议,以便我可以决定首先学习哪些文档。 首先,哪些assertThat哪种方法更好? org.junit.Assert.assertThat(来自junit-4.11.jar) org.hamcrest.MatcherAssert.assertThat(来自hamcrest-core-1.3.jar) 根据去年的一个人的说法, “JUnit有assertThat方法,但是hamcrest有自己的assertThat方法做同样的事情。” 。 根据今年早些时候的人的说法,Hamcrest “可能会提供更好的错误消息,因为匹配器被称为描述不匹配” 。 在这些post中很难分辨出哪些版本的Junit和Hamcrest被比较了。 所以我想根据最新发布的版本推荐。

什么是惯用的Hamcrest模式断言迭代的每个元素匹配给定的匹配器?

检查以下代码段: assertThat( Arrays.asList(“1x”, “2x”, “3x”, “4z”), not(hasItem(not(endsWith(“x”)))) ); 这断言列表没有不以“x”结尾的元素。 当然,这是说明列表的所有元素都以“x”结尾的双重否定方式。 另请注意,该片段会引发: java.lang.AssertionError: Expected: not a collection containing not a string ending with “x” got: 这列出了整个列表,而不仅仅是不以“x”结尾的元素。 那么有一种惯用的方式: 断言每个元素以“x”结尾(没有双重否定) 在断言错误时,仅列出那些不以“x”结尾的元素

如何使用Hamcrest检查双精度数组中的每个元素是否“接近”另一个数组中的每个元素?

我想比较两个双打arrays。 使用vanilla JUnit,我可以这样做: double[] a = new double[]{1.0, 2.0, 3.0}; double[] b = new double[]{1.0, 2.0, 3.0}; assertEquals(a, b, 1e-10); 我想知道如何使用Hamcrest,最好不要创建自定义匹配器(如果可能)。 类似于为数组中的每个元素使用“close”匹配器的东西。

有没有一种简单的方法来匹配使用Hamcrest的字段?

我想测试一个对象的特定字段是否与我指定的值匹配。 在这种情况下,它是S3Bucket对象中的存储桶名称。 据我所知,我需要为此编写一个自定义匹配器: mockery.checking(new Expectations() {{ one(query.s3).getObject(with( new BaseMatcher() { @Override public boolean matches(Object item) { if (item instanceof S3Bucket) { return ((S3Bucket)item).getName().equals(“bucket”); } else { return false; } } @Override public void describeTo(Description description) { description.appendText(“Bucket name isn’t \”bucket\””); } }), with(equal(“key”))); … }}); 如果有一种更简单的方法可以做到这一点会很好,例如: mockery.checking(new Expectations() {{ one(query.s3).getObject( with(equal(methodOf(S3Bucket.class).getName(), “bucket”)), with(equal(“key”))); … }}); […]

Mockito的Matcher vs Hamcrest Matcher?

这将是一个简单的,但我找不到它们和使用哪一个,如果我有两个lib包含在我的类路径中?

如何断言列表中至少有n个项大于x(在junit中使用hamcrest)

我可以使用以下代码检查列表是否有一个大于30的项目。 //Using Hamcrest List ints= Arrays.asList(22,33,44,55); assertThat(ints,hasItem(greaterThan(30))); 但是,如果列表中至少有2个项目大于30,我怎么断言呢? 有了AssertJ ,我知道有一个解决方案。 但我不知道如何用Hamcrest实现这一点。 //Using AssertJ List ints= Arrays.asList(22,33,44,55); Condition greaterThanCondition = new Condition(“greater”) { @Override public boolean matches (Integer i){ return i>30; } } ; assertThat(ints).haveatLeast(2,greaterThanCondition);