如何从 Java 应用程序内部运行 JUnit 测试?

2022-08-31 16:51:41

是否可以从我的 Java 应用程序内部运行 JUnit 测试?

是否有我可以使用的测试框架(例如 JUnit.jar?),或者我是否强制查找测试文件、调用方法并自己跟踪异常?

我问的原因是我的应用程序需要做很多工作才能开始启动(大量的依赖关系和配置等),并且使用外部测试工具(如JUnit Ant任务)需要大量的工作来设置。

启动应用程序,然后在应用程序内部运行我的测试会更容易。

有没有一个简单的测试框架来运行测试并从Java应用程序内部输出结果,或者我被迫编写自己的框架?


答案 1

是的,可以。我做过几次,在生产系统中运行诊断/烟雾测试。这是调用 JUnit 的代码的关键部分的片段:

JUnitCore junit = new JUnitCore();
Result result = junit.run(testClasses);

不要在应用程序中使用 JUnit.main,它会在测试完成后调用,因此可能会停止 JVM 进程。System.exit

您可能希望捕获 JUnit 的“常规”控制台输出(点和简单报告)。这可以通过注册轻松完成(此类提供此简单报告)。TextListener

另请注意使用这种方法的几种并发症:

  1. 测试任何“测试框架”,包括如此小的框架,虽然非常简单,但可能会令人困惑。例如,如果要测试“测试框架”在其中一个测试失败时是否返回失败结果,您可以(应该?)创建始终失败的示例 JUnit 测试,并使用“测试框架”执行该测试。在这种情况下,失败的测试用例实际上是测试数据,不应该作为“正常”JUnit执行。有关此类测试的示例,您可以参考 JUnit 的内部测试用例。

  2. 如果你想准备/显示你的自定义报告,你应该注册自己的报告,因为JUnit返回的结果不包含(直接)关于通过的测试和测试方法的信息(它只是作为测试的一部分“硬编码”)。RunListenerDescription


答案 2

如 JUnit 常见问题解答中所述:

public static void main(String args[]) {
  org.junit.runner.JUnitCore.main("junitfaq.SimpleTest");
}