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。)
- 如果这是您的基本testing类,例如AbstractTest,并且所有的testing都会扩展这个类,那么将这个类定义为抽象类
- 如果是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解决了我的问题。 我希望这能帮助那些正在为类似的问题而苦苦挣扎的人。