在我的代码中,只有当它在JUnit测试中运行时,我才需要进行某些修复。如何才能确定代码是否在JUnit测试中运行?有没有类似JUnit.isRunning() == true的东西?
发布于 2012-10-04 05:46:34
如果你想以编程方式决定运行哪个“配置文件”,这可能是一个好主意。考虑一下用于配置的Spring Profiles。在集成测试中,您可能希望针对不同的数据库进行测试。
下面是测试过的代码,可以正常工作
public static boolean isJUnitTest() {
for (StackTraceElement element : Thread.currentThread().getStackTrace()) {
if (element.getClassName().startsWith("org.junit.")) {
return true;
}
}
return false;
}发布于 2010-02-26 21:47:24
首先,这可能不是一个好主意。您应该单元测试实际的生产代码,而不是稍微不同的代码。
如果您真的想这样做,您可以查看堆栈跟踪,但由于您无论如何都要为此更改程序,所以您不妨在代码中引入一个新的静态布尔值字段isUnitTesting,并让JUnit将其设置为true。保持简单。
发布于 2014-04-24 20:06:54
这个帖子上的许多人说,在JUnit下运行稍微不同的代码不是一个好主意。我大体上同意,但我认为也有一些例外。
例如,我目前正在为连接到数据库的应用程序编写集成(而不是单元)测试。
这些验收测试通常需要使用特定的测试数据完全重新初始化DB。
显然,我永远不希望在实际的生产数据库上执行此操作,因为这可能会完全擦除有价值的生产数据。
保证这种情况永远不会发生的最简单方法是,当代码在JUnit下运行时,使其不能连接到生产数据库。例如,如果生成连接的工厂可以知道它是在JUnit下运行的,并且在这种情况下,将返回空连接,则可以反过来执行此操作,除非我们尝试连接的数据库具有已知为测试数据库的名称(例如:"testdatabase")。
https://stackoverflow.com/questions/2341943
复制相似问题