一段时间以来,可以配置mavensurefire以在一个构建中执行jUnit测试和testNG测试。我不会详细说明我这样做的原因(好吧,提示:testNG是我们的标准框架,但一些框架如jnario需要jUnit)。一般的做法是像这样配置surefire插件:maven-surefire-plugin${surefire.version}org.apache.maven.surefiresurefire-junit47${surefire.version}org.apache.maven.surefiresurefire-testng${surefire.version}(takenfr
理想情况下,我想编写JUnit测试代码,以交互方式测试学生基于文本的I/O应用程序。使用System.setIn()/.setOut()会导致问题,因为底层流正在阻塞。Birkner的系统规则(http://www.stefan-birkner.de/system-rules/index.html)在较早的帖子(Testingconsolebasedapplications/programs-Java)中被推荐,但它似乎要求在运行单元测试目标之前提供所有标准输入,因此不是交互式的。要提供具体的测试目标示例,请考虑这个猜谜游戏代码:publicstaticvoidguessingGame
以前,当我在eclipse下使用JUnit时,我常常双击JUnitView中的某处,然后弹出一个比较窗口。这显示了实际与预期之间的确切差异(如版本控制系统所做的,例如gitdiff工具)。现在我再也找不到它了。它在哪里?或者它是否从新版本中删除? 最佳答案 您在JUnitView中双击失败。请注意,差异仅在测试因ComparisonFailure而失败时可用 关于java-eclipsejunit差异窗口,我们在StackOverflow上找到一个类似的问题:
我刚刚意识到(在将遗留代码从JUnit4迁移到JUnit5时)我们的一些测试方法没有执行,因为它们没有@Test注释。他们没有它,因为它们覆盖了抽象父类(superclass)(存在注释的地方)的方法。我可以通过向每个方法添加@Test轻松解决此问题。但我想知道这是否是预期的行为。它从JUnit4更改为5,但我在officialJUnit5UserGuide中找不到任何相关信息或其他任何地方。根据thisquestion,注解通常不被继承。但似乎这是在新的JUnit版本中有意更改的。(或者我错过了什么?)抽象测试类importorg.junit.jupiter.api.Test;abs
是否有使用标准Hamcrest匹配器的以下断言语句的较短版本?Collectioncollection=...assertThat(collection,is(anyOf(nullValue(Collection.class),emptyCollectionOf(Element.class))));我意识到有一种方法可以创建自定义匹配器,希望可能已经有一些东西可以解决这个问题而无需任何额外的代码更改。 最佳答案 没有开箱即用的解决方案,更糟糕的是,either()由于this而无法使用漏洞。所以最短的方法是这样的:assertTha
我是Java的新手。我构建了一个JUnit测试类,并且在这个文件中有许多测试方法。当我运行此类(在NetBeans中)时,它会按顺序运行类中的每个测试方法。问题1:如何只运行此类中测试方法的特定子集?(可能的答案:为我希望忽略的测试在@Test上方写上@Ignore。但是,如果我想指出我想运行哪些测试方法而不是我想忽略的测试方法,是否有更方便的方法来执行此操作?)问题2:有没有一种简单的方法可以更改各种测试方法的运行顺序?谢谢。 最佳答案 你应该阅读TestSuite的。它们允许对您的单元测试方法进行分组和排序。这是一个摘录表格th
匹配器IsIterableContainingInAnyOrder有两个静态工厂方法重载containsInAnyOrder(两者都有返回类型Matcher>):containsInAnyOrder(java.util.Collection>itemMatchers)containsInAnyOrder(Matcher...itemMatchers)现在考虑下面的程序:importstaticorg.hamcrest.collection.IsIterableContainingInAnyOrder.containsInAnyOrder;importstaticorg.hamcrest
我有两个集合,我试图在我的单元测试中比较它们是否相等,但我正在努力使用contains方法。这是我所拥有的:@TestpublicvoidgetAllItems(){CollectionactualItems=auction.getAllItems(joe);CollectionexpectedItems=Lists.newArrayList();expectedItems.add(iPhone);expectedItems.add(skateboard);assertThat(expectedItems,contains(actualItems));}items包含与expected
我正在使用junit5,我想在嵌套类中创建参数化测试。例如:classCardTest{@NestedclassCost{Streamcards(){returnStream.of(Arguments.of(Card.common(0,Color.RED),0),/**OtherData**/Arguments.of(Card.choseColor(),50));}@MethodSource("cards")@ParameterizedTestvoidcardCost(Cardcard,intcost){assertThat(card.cost()).isEqualTo(cost);}
这question建议使用timeout@Test注释的参数让JUnit在该超时期限后强制停止测试。但到目前为止,我们有大约5000个单元测试,我们希望制定一项政策,要求开发人员绝不发布需要超过10秒才能完成的测试。该政策可能会说“瞄准任何测试在30秒后停止。(这些数字只是示例,我们的想法是为大多数用例定义一些“足够好”的东西,但这也确保事情不会“永远”运行)现在我想知道是否有一种方法可以在不进入每个测试用例并添加该注释参数的情况下启用这种行为。现有question也无济于事:我正在寻找一个更改来启用此功能,而不是每个测试类一个更改解决方案。一个中央全局交换机。不是每个文件或方法一个。