如何根据测试类列表有条件地运行测试的JUnit测试套件?

时间:2014-07-24 16:03:24

标签: java unit-testing testing junit junit4

我需要创建一个JUnit测试套件,它根据用户提供的输入文件运行测试。 I.E如果用户说应该运行10个测试中的5个,那么将运行5个测试,仅此而已。有没有办法获取包含测试我的案例的类列表并仅运行它们? 我试着像这样使用for循环

for (Class a: classes)
    JUnitCore.runClasses(a);

但是我收到了这个错误

Exception in thread "main" java.lang.NoClassDefFoundError: org/junit/runner/JUnitCore
at TestRunner.main(TestRunner.java:56)
Caused by: java.lang.ClassNotFoundException: org.junit.runner.JUnitCore
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 1 more

1 个答案:

答案 0 :(得分:0)

有两种选择。

使用分类跑步者

它允许你标记"通过标签测试和构建测试套件。 你可以查看文档: https://github.com/junit-team/junit/wiki/Categories

优点:

  • 更容易设置
  • 只有标有类别的测试才会运行

缺点:

  • 修复了测试套件,要更改它们,您必须更改测试代码

使用规则

编写您的测试规则并在此规则中忽略(通过抛出AssumptionViolatedException)所有不在列表中的测试。 文档在这里:

https://github.com/junit-team/junit/wiki/Rules

查看TestWatcher规则,它包含有关传递给其方法的Description对象中的测试类名称和方法名称的信息。

优点:

  • 非常灵活的测试套件

缺点:

  • 难以设置
  • 运行所有测试,但忽略列表中的那些测试,即使没有测试运行,某些@Before和@After方法可能会触发
  • 所有测试必须使用此规则,测试不使用规则将照常运行