Spring Test ContextConfiguration继承自Aplication上下文?

时间:2018-02-13 16:46:41

标签: java spring spring-test

加载Spring Context以测试Spring应用程序时,例如像这样的东西:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader = AnnotationConfigContextLoader.class, classes=MyTestConfig.class)
public class SpringTest {

从应用程序本身继承Spring Context并覆盖那些适用于测试的配置是不错的做法?

或者测试上下文是否应该与应用程序的上下文隔离(这意味着我将在两者中都有相同配置的副本?

1 个答案:

答案 0 :(得分:0)

我认为最好将上下文分解为基于目的的部分,然后使用Spring Profiles。例如,您将始终拥有域内容的Root上下文。 Web上下文具有dispatcherServlet资源。然后数据库bean可以在不同的Spring Profiles中进行测试和运行。我说"跑"因为我不喜欢像dev / qa / prod那样使用单独的弹簧配置文件,就像有些人推荐的那样。通过JNDI而不是代码来控制它似乎更容易。

我对Mockito并没有做太多的事情,但我的有限经验似乎表明它与这种设计相当吻合。

示例JUNIT

@ActiveProfiles({"root","H2Test"})

@Transactional
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {H2ContextConfig.class, 
    RootContextConfig.class}, loader = 
    AnnotationConfigContextLoader.class)
public class TestDefectRepository {
...

使用H2的DataSource,EntityManager等:

@Configuration
@Profile("H2Test")

public class H2ContextConfig {