我已从JUnit3.8切换到JUnit4.4。我使用ant运行我的测试,所有测试都成功运行,但测试实用程序类失败并显示“No runnable methods”错误。我使用的模式是在测试文件夹下包含名称为* Test *的所有类。
据我所知,跑步者找不到任何用@Test属性注释的方法。但是它们不包含这样的注释,因为这些类不是测试。 令人惊讶的是,当在eclipse中运行这些测试时,它并没有抱怨这些类。
在JUnit3.8中,它根本不是问题,因为这些实用程序类没有扩展TestCase,所以跑步者没有尝试执行它们。
我知道我可以在ant脚本中的junit目标中排除这些特定的类。但我不想在我添加的每个新实用程序类上更改构建文件。我也可以重命名课程(但是给课程好名字总是我最弱的人才:-))
这个问题有没有优雅的解决方案?
答案 0 :(得分:137)
使用@Ignore注释您的util类。这将导致JUnit不尝试将它们作为测试运行。
答案 1 :(得分:78)
我的具体情况有以下情况。我们的测试
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
答案 2 :(得分:46)
假设您控制了用于查找测试类的模式,我建议将其更改为匹配*Test
而不是*Test*
。这样TestHelper
将无法匹配,但FooTest
将会匹配。
答案 3 :(得分:34)
要防止JUnit实例化您的测试基类,只需将其设为
即可public abstract class MyTestBaseClass { ... whatever... }
(@ Ignore将其报告为忽略,我为暂时忽略测试保留。)
答案 4 :(得分:15)
答案 5 :(得分:7)
使用IDE的代码完成时要小心添加@Test
的导入。
例如,它必须是import org.junit.Test
而不是import org.testng.annotations.Test
。如果你做了后者,那么你将获得“没有可运行的方法”#34;错误。
答案 6 :(得分:5)
Ant现在附带了skipNonTests
属性,该属性旨在完全按照您的要求进行操作。无需更改基类来抽象或添加注释。
答案 7 :(得分:4)
如何为这些类添加空测试方法呢?
public void avoidAnnoyingErrorMessageWhenRunningTestsInAnt() {
assertTrue(true); // do nothing;
}
答案 8 :(得分:0)
我在运行最简单的一段代码时遇到了类似的问题(“没有可运行的方法......”)(使用@Test,@ Before等),并且找不到解决方案。我使用的是Junit4和Eclipse SDK 4.1.2版。通过使用最新的Eclipse SDK 4.2.2解决了我的问题。我希望这可以帮助那些在类似问题上苦苦挣扎的人。
答案 9 :(得分:0)
在你的测试类中,如果写入import org.junit.jupiter.api.Test;删除它并写入import org.junit.Test;在这种情况下,它也是我的工作。