我已经从JUnit3.8切换到JUnit4.4.我使用ant运行我的测试,所有测试都成功运行,但测试实用程序类失败并显示"No runnable methods"错误.我使用的模式是在测试文件夹下包含名称为*Test*的所有类.
我知道跑步者找不到任何用@Test属性注释的方法.但是它们不包含这样的注释,因为这些类不是测试.令人惊讶的是,当在eclipse中运行这些测试时,它并没有抱怨这些类.
在JUnit3.8中,它根本不是问题,因为这些实用程序类没有扩展TestCase,所以跑步者没有尝试执行它们.
我知道我可以在ant脚本中的junit目标中排除这些特定的类.但我不想在我添加的每个新实用程序类上更改构建文件.我也可以重命名课程(但是给课程好名字总是我最弱的人才:-))
这个问题有没有优雅的解决方案?
使用@Ignore注释您的util类.这将导致JUnit不尝试将它们作为测试运行.
我的具体情况有以下情况.我们的测试
public class VenueResourceContainerTest extends BaseTixContainerTest
一切都延伸
BaseTixContainerTest
和JUnit试图运行BaseTixContainerTest.可怜的BaseTixContainerTest只是试图设置容器,设置客户端,订购一些披萨并放松......男人.
如前所述,您可以使用注释对类进行注释
@Ignore
但这导致JUnit报告该测试被跳过(而不是完全被忽略).
Tests run: 4, Failures: 0, Errors: 0, Skipped: 1
那种烦恼我.
所以我创建了BaseTixContainerTest抽象,现在JUnit真的忽略了它.
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0
假设您已经控制了用于查找测试类的模式,我建议将其更改为匹配*Test
而不是*Test*
.这种方式TestHelper
不会匹配,但FooTest
会.
为了防止JUnit实例化你的测试基类,只需要它
public abstract class MyTestBaseClass { ... whatever... }
(@Ignore报告它被忽略了,我保留暂时忽略的测试.)
如果这是您的基本测试类,例如AbstractTest,并且所有测试都扩展了这个,那么将此类定义为abstract
如果它是Util类,那么最好从类中删除*Test重命名它是MyTestUtil或Utils等.
使用IDE的代码完成时要小心添加导入@Test
.
例如,它必须是,import org.junit.Test
而不是import org.testng.annotations.Test
.如果您执行后者,您将获得"无可运行方法"错误.
Ant现在提供的skipNonTests
属性旨在完全按照您的要求进行操作.无需更改基类来抽象或向其添加注释.