我有一个包含4个测试类的包。我想制作一个JUnit测试套件。所以在Eclipse中,我右键单击我的包并执行New>Other>JUnitTestSuite向导有一个警告,“警告:未选择测试类”并且要包含在套件中的测试类列表:为空。我不确定为什么。我有几个*Test.java类,它们的public方法用@Test注释。我通过JUnit测试用例向导创建了这些......我在其他StackOverflow答案中看到了一些代码,可以用来创建测试套件,但为什么它不能在IDE中运行?我是否应该费心使用测试套件?似乎我只需右键单击该包并选择RunAs>JUnitTest。
为什么测试方法的名称会影响其他测试?我有一个包含2类测试的套件,当我更改class1的方法名称时,我在class2中的测试正常(绿色)。我注意到这两个类都有一个同名的方法,但失败的测试不是这些。但是,如果我重命名其中任何一个,所有测试都可以。在不同的类中但在同一个套件中有2个同名的方法可以吗?另一个测试随机失败的事实只是巧合吗?ps:在我重命名该方法后,运行测试的顺序发生了变化。ps2:抱歉我的英语不好。这张图可以更好地解释我的问题: 最佳答案 JUnit中没有错误!我们的团队经历了类似的结果,这是由于资源管理不当造成的。您可以尝试
一段时间以来,可以配置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
我是Java的新手。我构建了一个JUnit测试类,并且在这个文件中有许多测试方法。当我运行此类(在NetBeans中)时,它会按顺序运行类中的每个测试方法。问题1:如何只运行此类中测试方法的特定子集?(可能的答案:为我希望忽略的测试在@Test上方写上@Ignore。但是,如果我想指出我想运行哪些测试方法而不是我想忽略的测试方法,是否有更方便的方法来执行此操作?)问题2:有没有一种简单的方法可以更改各种测试方法的运行顺序?谢谢。 最佳答案 你应该阅读TestSuite的。它们允许对您的单元测试方法进行分组和排序。这是一个摘录表格th
我正在使用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也无济于事:我正在寻找一个更改来启用此功能,而不是每个测试类一个更改解决方案。一个中央全局交换机。不是每个文件或方法一个。
我正在使用JUnit3,并且经常遇到这样的情况:我必须测试对象是否已正确创建。我的想法是编写一个如下所示的类MyTestBase,然后针对特定情况的单元测试对其进行扩展。但是在我给出的示例中,MyTests不会运行MyTestBase中的测试。publicclassMyTestBaseextendsTestCase{protectedStringfoo;publicvoidtestFooNotNull(){assertNotNull(foo);}publicvoidtestFooValue(){assertEquals("bar",foo);}}publicclassMyTestsex