2016-12-13 63 views
1

是否有可能要求junit在做测试之前运行规定?是否有可能要求junit在做测试之前运行规定脚本?

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

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

一个很好的事情是有一个入口测试文件,所以我可以从这里运行我的java代码。用法

例子:

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

我知道人们会告诉我的gradle中前或其他构建工具来运行这个。

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

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

+0

标志着我这是一个可能重复的,因为“规定的”是不明确的,如果你只是在谈论的Junit。 Junit只是一个运行单元测试的Java工具。有几种方法可以运行Junit(包括Gradle)。重复的问题解决了如何以便携式_Junit_方式运行设置步骤,但是您可能会问错误的问题,并且可能想询问如何在Gradle中执行此操作。 – rmlan

回答

2

您需要使用@BeforeClass注释。

它表明其附接到必须在类的所有测试之前执行静态方法一次。当测试方法共享计算昂贵的设置(例如,连接到数据库,连接池)时会发生这种情况。

例如Hibernate的SessionFactory初始化一个昂贵的操作:

private static SessionFactory sessionFactory; 

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

是否可以使用@Autowired?如何在这个静态中加载上下文? – BigDong

+0

@BigDong当然你是对的,这是不可能的,这是不好的例子。我已经更新了另一个。谢谢你的评论。 – DimaSan