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

时间:2015-03-26 09:16:40

标签: java spring junit spring-test

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

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

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

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

那么,我怎样才能在@RunWith(SpringJUnit4ClassRunner.class)开始之前初始化代码?

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

2 个答案:

答案 0 :(得分:7)

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

或者你可以先用你自己的Runner初始化SpringJUnit4ClassRunner然后运行SpringJUnit4ClassRunner

答案 1 :(得分:0)

我的问题略有不同。加载Spring上下文后,我需要在服务中部署一些东西。解决方案使用自定义配置类进行测试,并在@PostConstruct方法中运行部署。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = TestConfig.class, loader = AnnotationConfigContextLoader.class)
public class JunitTest {

  @Configuration
  @ComponentScan(basePackages = { "de.foo })
  public static class TestMConfig {

      @Autowired
      private DeploymentService service;


      @PostConstruct
      public void init() {
        service.deploy(...);
      }
  }

  @Test
  public void test() {
      ...
  }
}

也许这有帮助,有人,有时,某个地方;)