如何在SpringJUnit4ClassRunner上下文初始化之前运行代码?

mem*_*und 8 java junit spring spring-test

在我的应用程序中,我在spring应用程序启动之前初始化属性,如下所示

MapLookup.setMainArguments(new String[] {"logging.profile", profile}); //from args
SpringApplication.run(source, args);
Run Code Online (Sandbox Code Playgroud)

(仅供参考:它用于log4j2记录,必须在spring开始初始化之前设置).

现在我想运行一个@IntegrationTest,但使用相同的日志配置.显然我不能使用上面的代码,因为JUnit测试没有使用SpringApplication.run.

那么,如何在@RunWith(SpringJUnit4ClassRunner.class)开始之前初始化代码呢?

注意:BeforeClass不起作用,因为这是在spring上下文启动后执行的.

Evg*_*eev 8

您可以在静态初始化程序中运行初始化.静态初始化程序将在JUnit加载测试类之后和JUnit读取其上的任何注释之前运行.

或者,您可以首先使用您自己的Runner初始化SpringJUnit4ClassRunner,然后运行SpringJUnit4ClassRunner

  • 你的意思是测试类中的`static {}`块?我刚尝试过,但没有成功. (2认同)