【发布时间】:2011-01-03 10:50:33
【问题描述】:
我在 Eclipse 中使用 JUnit 4。我的包中有一些测试类,并且想要全部运行它们。怎么样?
【问题讨论】:
我在 Eclipse 中使用 JUnit 4。我的包中有一些测试类,并且想要全部运行它们。怎么样?
【问题讨论】:
在包资源管理器中右键单击包并选择“运行方式”和“单元测试”。
【讨论】:
在 Eclipse 中,如果您右键单击文件夹并选择 Run As JUnit Test,则只会运行该文件夹中的测试(即不会运行嵌套子文件夹中的测试)。为了在一个目录中运行所有测试,包括嵌套目录中的测试,您需要使用类似 googlecode.junittool 框的东西。
使用它,我创建了类似以下的内容
package com.mycompany.myproject.mymodule;
import org.junit.runner.RunWith;
import com.googlecode.junittoolbox.SuiteClasses;
import com.googlecode.junittoolbox.WildcardPatternSuite;
@RunWith(WildcardPatternSuite.class)
@SuiteClasses({ "**/*Test.class" })
public class RunAllMyModuleTests {
}
我在我的 mavin 构建中使用它添加了所需的依赖项(jar 文件)(除了 junit 依赖项):
<dependency>
<groupId>com.googlecode.junit-toolbox</groupId>
<artifactId>junit-toolbox</artifactId>
<version>1.5</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit-dep</artifactId>
<version>4.8.2</version>
</dependency>
右键单击该类并选择 Run As JUnit 测试运行指定目录中的所有测试,包括嵌套子文件夹中的所有测试。
【讨论】:
对于 JUnit 4,我喜欢使用带注释的 AllTests 类:
@RunWith(Suite.class)
@Suite.SuiteClasses({
// package1
Class1Test.class,
Class2test.class,
...
// package2
Class3Test.class,
Class4test.class,
...
})
public class AllTests {
// Junit tests
}
并且,为了确保我们不会忘记向其中添加 TestCase,我有一个覆盖测试(还检查是否正在测试每个公共方法)。
【讨论】:
我曾经声明一个AllTests 类,这样我也可以从命令行运行所有测试:
public final class AllTests
{
/**
* Returns a <code>TestSuite</code> instance that contains all the declared
* <code>TestCase</code> to run.
*
* @return a <code>TestSuite</code> instance.
*/
public static Test suite()
{
final TestSuite suite = new TestSuite("All Tests");
suite.addTest(Test1.suite());
suite.addTest(Test2.suite());
suite.addTest(Test3.suite());
return suite;
}
/**
* Launches all the tests with a text mode test runner.
*
* @param args ignored
*/
public static final void main(String[] args)
{
junit.textui.TestRunner.run(AllTests.suite());
}
} // AllTests
每个测试类定义的地方
/**
* Returns a <code>TestSuite</code> instance that contains all
* the declared <code>TestCase</code> to run.
*
* @return a <code>TestSuite</code> instance.
*/
public static final Test suite()
{
return new TestSuite(Test1.class); // change the class accordingly
}
【讨论】:
使用 JUnit5,您可以轻松创建一个“套件”类,它将运行一个包(甚至是子包,它以递归方式工作)中的所有测试:
@RunWith(JUnitPlatform.class)
@SelectPackages("my.test.package")
public class MySuite {
}
完成后,您可以使用“Run as Test”运行此套件。
【讨论】:
在包资源管理器中,您可以使用包的上下文菜单并选择run as junit test。
【讨论】:
右键单击包并从“运行方式”子菜单中选择“运行方式测试”。
【讨论】: