如何在JUnit测试类中运行(或更改顺序)特定的测试方法?

6
我对Java还不太熟悉。我构建了一个JUnit测试类,在这个文件中有许多测试方法。当我运行这个类时(在NetBeans中),它会按顺序运行类中的每个测试方法。
问题1:如何仅运行此类中特定子集的测试方法? (可能的答案:为我需要忽略的测试写上@Ignore。然而,如果我想指示我想要运行哪些测试方法而不是忽略哪些测试方法,是否有更方便的方法?)
问题2:是否有一种简单的方法可以更改各种测试方法运行的顺序?
谢谢。

当你说方法时,你是指测试方法吗? - dom farr
3
为什么顺序很重要?每个单元测试都应该能够独立运行。 - dom farr
2
通常依赖于执行顺序是一种测试代码的坏味道,测试应该是无状态的。 - Gabriel Ščerbák
是的,我应该编写测试方法。 - kmccoy
@dom farr:也许我做错了什么,但我想测试一下改变测试方法调用顺序是否会导致任何问题/错误。 - kmccoy
@K McCoy。你的测试引起了错误?我建议创建一组描述所需行为的测试,然后完成代码,以便您只获得通过的测试。 - dom farr
4个回答

6

您应该阅读关于测试套件的内容。它们允许对单元测试方法进行分组和排序。以下是此文章的摘录

"JUnit测试类可以通过创建测试套件来按特定顺序运行。

编辑:以下是一个简单的示例:

 public static Test suite() { 
      TestSuite suite = new TestSuite("Sample Tests");

      suite.addTest(new SampleTest("testmethod3"));
      suite.addTest(new SampleTest("testmethod5"));

      return suite; 
 }

你的示例将运行SampleTest.class中的所有测试方法。但是,如果在SampleTest.class中我有各种测试方法[testmethod1(),testmethod2()...],而我只想运行testmethod3()和testmethod5(); 是否可能? - kmccoy
1
@K McCoy:我已经编辑了我的示例以符合您的要求 :) - Lukasz
1
我已经测试了上述代码并注意到两件事: (1)第一行应该是:public static TestSuite suite() { (2)在SampleTest类内部需要定义构造函数 <code>public SampleTest (String name) { super(name); }</code> 否则,这对我很有帮助。谢谢! - kmccoy
1
我尝试执行上面的代码,但是出现了“SampleTest(String)构造函数未定义”的错误。这里有什么我漏掉的吗?我还读到过无法按顺序运行同一测试类中的测试方法,所以如果您能帮我解决这个问题,我会非常感激。 - Adriano

2
这个回答告诉你如何做。随机运行测试的顺序是一个好主意!
正如dom farr的评论所述,每个单元测试都应该能够独立运行。在测试运行之后或之前不应有任何残留或给定的要求。所有单元测试都应该以任何顺序或任何子集运行通过。
拥有或生成一个测试用例 --> 测试列表的映射,然后随机执行所有测试,这并不是一个可怕的想法。

0

有很多方法可以实现这个目标,但具体取决于您的需求。例如,您可以将每个测试方法拆分为单独的测试类,然后将它们排列在不同的测试套件中(如果需要,可以允许套件中的方法重叠)。或者,更简单的解决方案是将您的测试方法作为普通类方法,并在您的类中编写一个测试方法以特定顺序调用它们。您是否希望它们被动态调用?


0

我也没有使用Java很长时间,但据我所见,似乎没有一种方便的方法来标记要执行而不是忽略的方法。相反,我认为可以使用IDE来实现这一点。当我想在Eclipse中执行单个测试时,我可以使用junit视图通过单击它们来运行单个测试。我想Netbeans中也有类似的东西。

我不知道重新排序测试执行的简单方法。Eclipse有一个按钮,可以重新运行失败的测试,但听起来你想要更多功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接