首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何才能确定代码是否在JUnit测试中运行?

如何才能确定代码是否在JUnit测试中运行?
EN

Stack Overflow用户
提问于 2010-02-26 21:37:40
回答 10查看 40.6K关注 0票数 86

在我的代码中,只有当它在JUnit测试中运行时,我才需要进行某些修复。如何才能确定代码是否在JUnit测试中运行?有没有类似JUnit.isRunning() == true的东西?

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2012-10-04 05:46:34

如果你想以编程方式决定运行哪个“配置文件”,这可能是一个好主意。考虑一下用于配置的Spring Profiles。在集成测试中,您可能希望针对不同的数据库进行测试。

下面是测试过的代码,可以正常工作

代码语言:javascript
运行
复制
public static boolean isJUnitTest() {  
  for (StackTraceElement element : Thread.currentThread().getStackTrace()) {
    if (element.getClassName().startsWith("org.junit.")) {
      return true;
    }           
  }
  return false;
}
票数 78
EN

Stack Overflow用户

发布于 2010-02-26 21:47:24

首先,这可能不是一个好主意。您应该单元测试实际的生产代码,而不是稍微不同的代码。

如果您真的想这样做,您可以查看堆栈跟踪,但由于您无论如何都要为此更改程序,所以您不妨在代码中引入一个新的静态布尔值字段isUnitTesting,并让JUnit将其设置为true。保持简单。

票数 32
EN

Stack Overflow用户

发布于 2014-04-24 20:06:54

这个帖子上的许多人说,在JUnit下运行稍微不同的代码不是一个好主意。我大体上同意,但我认为也有一些例外。

例如,我目前正在为连接到数据库的应用程序编写集成(而不是单元)测试。

这些验收测试通常需要使用特定的测试数据完全重新初始化DB。

显然,我永远不希望在实际的生产数据库上执行此操作,因为这可能会完全擦除有价值的生产数据。

保证这种情况永远不会发生的最简单方法是,当代码在JUnit下运行时,使其不能连接到生产数据库。例如,如果生成连接的工厂可以知道它是在JUnit下运行的,并且在这种情况下,将返回空连接,则可以反过来执行此操作,除非我们尝试连接的数据库具有已知为测试数据库的名称(例如:"testdatabase")。

票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2341943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档