【问题标题】:Is it possible to ask junit to run a prescript before doing tests? [duplicate]是否可以在进行测试之前要求 junit 运行规定? [复制]
【发布时间】:2017-04-28 22:58:08
【问题描述】:

是否可以在进行测试之前要求 junit 运行规定?

我不想运行@Before,因为它只会初始化一个测试。 setUp 两者都不是,因为我认为它做同样的事情。

有 ClassRule 但它需要维护一个测试列表。

最好有一个入口测试文件,这样我就可以从这里运行我的 java 代码。

使用示例:

  • “整个测试需要启动一个数据库。”
  • “需要运行迁移脚本”

我知道人们会告诉我在 gradle 之前或其他构建工具中运行它。

我正在使用flyway进行数据库迁移,版本号存储在我的spring boot yaml文件中。我选择使用java而不是gradle来配置flyway,因为gradle需要使用命令行进行迁移,所以不能用jenkins运行。

另外,我不知道如何在 gradle 中读取 yaml 的值,也不知道如何运行脚本。

【问题讨论】:

  • 我将此标记为可能重复,因为如果您只是在谈论 Junit,“prescript”是模棱两可的。 Junit 只是一个运行单元测试的 Java 工具。有几种方法可以运行 Junit(包括 Gradle)。重复的问题解决了如何以可移植的 Junit 方式运行设置步骤,但您可能问错了问题,并且可能想询问如何在 Gradle 中执行此操作。

标签: java spring unit-testing junit spring-boot


【解决方案1】:

你需要使用@BeforeClass注解。

表示附加的静态方法必须执行一次,并且在类中的所有测试之前。当测试方法共享计算量大的设置(例如连接到数据库、连接池)时,就会发生这种情况。

例如HibernateSessionFactory初始化的昂贵操作:

private static SessionFactory sessionFactory;

@BeforeClass
public static void beforeClass() {
    sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
}

【讨论】:

  • 可以使用@Autowired 吗?如何在这个静态中加载上下文?
  • @BigDong 当然你是对的,这是不可能的,这是个坏例子。我已经更新了另一个。谢谢你的评论。
猜你喜欢
  • 2015-06-10
  • 2011-09-20
  • 2016-01-06
  • 1970-01-01
  • 1970-01-01
  • 2010-11-14
  • 1970-01-01
  • 2015-10-02
  • 2010-09-29
相关资源
最近更新 更多