代码之家  ›  专栏  ›  技术社区  ›  membersound

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

  •  12
  • membersound  · 技术社区  · 11 年前

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

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

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

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

    那么,我如何在 @RunWith(SpringJUnit4ClassRunner.class) 开始?

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

    2 回复  |  直到 11 年前
        1
  •  14
  •   Evgeniy Dorofeev    11 年前

    您可以在静态初始值设定项中运行初始化。静态初始化器将在JUnit加载测试类之后以及JUnit读取其上的任何注释之前运行。

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

        2
  •  3
  •   outofBounds    10 年前

    我有一个稍微不同的问题。在加载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() {
          ...
      }
    }
    

    也许这对某人、某个时候、某个地方有帮助;)