【发布时间】:2014-09-17 10:06:23
【问题描述】:
我在我的 JUnit 测试中使用带有 @Configuration 注释的类中定义的 Spring 配置的 JUnit 测试。测试如下所示:
@ContextConfiguration(classes = MyConfiguration.class})
@RunWith(SpringJUnit4ClassRunner.class)
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
public class SomeIntegrationTest {
@Autowired
private MyConfiguration myConfiguration;
@Test
public void someTest() throws Exception {
myConfiguration.myBean();
}
}
在MyConfiguration,我想使用Spring作用域SimpleThreadScope:
@Configuration
public class MyConfiguration {
@Bean
@Scope("thread")
public MyBean myBean() {
return new MyBean();
}
}
但是,当我运行测试时,范围没有注册。我明白了
java.lang.IllegalStateException: Failed to load ApplicationContext
...
Caused by: java.lang.IllegalStateException: No Scope registered for scope 'thread'
我知道如何以编程方式注册自定义范围:
context.getBeanFactory().registerScope("thread", new SimpleThreadScope());
我想避免使用 XML Spring 配置。
有什么办法,如何在单元测试中注册自定义范围?
【问题讨论】:
-
你解决了这个问题吗?如果是,你是怎么解决的?
-
嗨,我找到了一个非常优雅的解决方案,但我把它藏在某个地方,现在找不到它(代码已经被重构):)。让我再找一会儿。