1

我有生产代码和测试代码。我想知道生产代码是否从单元测试中运行。

4

2 回答 2

3

使用 Java 堆栈跟踪:

Thread.currentThread().getStackTrace()

这将返回您可以检查的StackTraceElements数组。例如,对于您的生产代码,最后一个元素应该是具有 Java main 方法的类。而通过单元测试,您最终应该得到测试运行器的类。

例如在 Eclipse 中运行 JUnit 会导致最后一个StackTraceElement

org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
于 2013-04-04T19:15:18.717 回答
1

我假设您需要某种方式来从生产代码中判断它是否已从单元测试中调用。

我有两种可能的方法:

  1. 假设代码在单个线程中运行,请使用ThreadLocal

  2. 使用系统属性(例如 System.setProperty("testMode", "ON"))。

无论如何,我同意 Jack Maney 的评论。在将污垢添加到您的生产代码之前,请重新考虑这一点。

于 2013-04-04T19:13:06.443 回答