繁体   English   中英

JUnit:如何在test utils类中避免“没有runnable方法”

[英]JUnit: how to avoid “no runnable methods” in test utils classes

我已经从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报告它被忽略了,我保留暂时忽略的测试。)

  1. 如果这是您的基本测试类,例如AbstractTest,并且您的所有测试都扩展了它,那么将此类定义为abstract
  2. 如果它是Util类,那么最好从类中删除* Test重命名它是MyTestUtil或Utils等。

使用IDE的代码完成时要小心,为@Test添加导入。

它必须是import org.junit.Test而不是import org.testng.annotations.Test ,例如。 如果您执行后者,您将获得“无可运行方法”错误。

Ant现在附带了skipNonTests属性,该属性旨在完全按照您的要求进行操作。 无需更改基类来抽象或向其添加注释。

如何为这些类添加空测试方法呢?

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

在你的测试类中如果写入import org.junit.jupiter.api.Test; 删除它并写入import org.junit.Test; 在这种情况下,它也是我的工作。

在运行最简单的一段代码(使用@Test,@ Before等)时,我也遇到了类似的问题(“没有可运行的方法......”),并且找不到解决方案。 我使用的是Junit4和Eclipse SDK 4.1.2版。 通过使用最新的Eclipse SDK 4.2.2解决了我的问题。 我希望这可以帮助那些在类似问题上挣扎的人们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM