如何在 SpringJUnit4ClassRunner 上下文初始化之前 运行 编码?
How to run code before SpringJUnit4ClassRunner context initialization?
在我的应用程序中,我在 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 上下文启动后执行的。
您可以运行 在静态初始化程序中进行初始化。静态初始值设定项将 运行 在 JUnit 加载测试后 class 和 JUnit 读取其上的任何注释之前。
或者你可以扩展 SpringJUnit4ClassRunner,首先在其中初始化你自己的 Runner,然后 运行 SpringJUnit4ClassRunner
我遇到了一个稍微不同的问题。在加载 Spring 上下文后,我需要向我的服务部署一些东西。解决方案使用自定义配置 class 进行测试,运行 在 @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() {
...
}
}
也许这对某个人、某个时间、某个地方有帮助 ;)
在我的应用程序中,我在 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 上下文启动后执行的。
您可以运行 在静态初始化程序中进行初始化。静态初始值设定项将 运行 在 JUnit 加载测试后 class 和 JUnit 读取其上的任何注释之前。
或者你可以扩展 SpringJUnit4ClassRunner,首先在其中初始化你自己的 Runner,然后 运行 SpringJUnit4ClassRunner
我遇到了一个稍微不同的问题。在加载 Spring 上下文后,我需要向我的服务部署一些东西。解决方案使用自定义配置 class 进行测试,运行 在 @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() {
...
}
}
也许这对某个人、某个时间、某个地方有帮助 ;)