JUnit:如何避免testing应用程序类中的“不可运行的方法”

我已经从JUnit3.8切换到JUnit4.4。 我运行我的testing使用ant,我所有的testing运行成功,但testing工具类失败,“没有可运行的方法”的错误。 我正在使用的模式是在testing文件夹下包含名称* Test *的所有类。

我知道跑步者找不到任何用@Test属性注解的方法。 但是他们不包含这样的注释,因为这些类不是testing。 令人惊讶的是,在eclipse中运行这些testing时,并不会抱怨这些类。

在JUnit3.8中,这并不是一个问题,因为这些实用程序类没有扩展TestCase,所以跑步者没有试图执行它们。

我知道我可以在ant脚本的junit目标中排除这些特定的类。 但是我不想在每添加一个新的工具类时更改构build文件。 我也可以重新命名课程(但给课堂上好的名字总是我最弱的人才:-))

有没有这个问题的优雅的解决scheme?

假设你在控制用于查找testing类的模式,我build议将其改为匹配*Test而不是*Test* 。 这样TestHelper将不会匹配,但FooTest会。

用@Ignore注释你的util类。 这将导致JUnit不尝试运行它们作为testing。

我的具体情况有以下情况。 我们的testing

 public class VenueResourceContainerTest extends BaseTixContainerTest 

都延伸

 BaseTixContainerTest 

而JUnit试图运行BaseTixContainerTest。 可怜的BaseTixContainerTest只是试图设置容器,安装客户端,点了一些披萨,然后放松一下。

如前所述,你可以用类来注释这个类

 @Ignore 

但是,这导致JUnit将该testing报告为跳过(而不是完全忽略)。

 Tests run: 4, Failures: 0, Errors: 0, Skipped: 1 

那种激怒我的

所以我做了BaseTixContainerTest抽象,现在JUnit真的忽略它。

 Tests run: 3, Failures: 0, Errors: 0, Skipped: 0 

阻止JUnit实例化你的testing基类

 public abstract class MyTestBaseClass { ... whatever... } 

(@Ignore报告它被忽略,我保留暂时忽略的testing。)

  1. 如果这是您的基本testing类,例如AbstractTest,并且所有的testing都会扩展这个类,那么将这个类定义为抽象
  2. 如果是Util类,那么最好删除*从类的testing重命名它是MyTestUtil或Utils等

Ant现在提供了skipNonTests属性,该属性被devise用来完成你正在寻找的东西。 不需要改变你的基类来抽象或添加注释。

那么为这些类添加一个空的testing方法呢?

 public void avoidAnnoyingErrorMessageWhenRunningTestsInAnt() { assertTrue(true); // do nothing; } 

使用IDE的代码完成为@Test添加导入时要小心。 例如,它必须是import org.junit.Test而不是import org.testng.annotations.Test 。 如果你做了后者,你会得到“不可运行的方法”的错误。

我也遇到类似的问题(“不可运行的方法..”)运行最简单的一段代码(使用@Test,@Before等),并find了解决scheme无处。 我使用的是Junit4和Eclipse SDK版本4.1.2。 使用最新的Eclipse SDK 4.2.2解决了我的问题。 我希望这能帮助那些正在为类似的问题而苦苦挣扎的人。