jUnit测试中的单个Spring上下文

时间:2014-01-20 07:44:55

标签: java spring configuration junit

我已经阅读了很多关于这个主题的建议,但似乎没有一个可行。 目前,应用程序上下文是为每个测试类创建的,但我希望它只创建一次并被所有测试类使用。

这是我的测试套件设置:

@RunWith(ClasspathSuite.class)
@ClassnameFilters({"org.*", ".*Test"})
public class AllTests {
}

这是我的上下文设置的抽象类。所有测试类都在扩展这个类。

@TestExecutionListeners({DependencyInjectionTestExecutionListener.class})
@ContextConfiguration(classes = {ServiceInitializer.Config.class})
@DirtiesContext
public abstract class ServiceInitializer extends AbstractJUnit4SpringContextTests {

@Configuration
@Import({TestConfig.class, SpringClientConfig.class})
public static class Config {
    @Bean
    public ContactsClient contactsClient(ContactsService contactsService) {
        return new ContactsClientFactory().createInstance(contactsService);         
    }
}

@Autowired
protected ContactsClient contactsService;

...

@Autowired
protected ApplicationContext appContext;


@BeforeClass
public static void setUpBeforeClass() throws Exception {
    initializeDB();
    initializeApplicationServiceProperties();
    dbInit = false;
}

protected static void initializeDB() throws Exception {
    ... database settings ...

    dropSQLTestDatabase(dbName, jdbcProperties);
    dropTestDatabase();
}

protected static void initializeApplicationServiceProperties() throws IOException {

    System.setProperty("log4j.config.file", ServiceInitializer.class.getClassLoader().getResource("log4j-test.xml").getFile());
    System.setProperty("app.config.file", ServiceInitializer.class.getClassLoader().getResource("test.properties").getFile());

    AppStartSupport.configureLogging();
    AppStartSupport.loadProperties();

}

...
}

有没有人知道如何更改此设置以实现将由所有jUnit测试使用的单个上下文?

谢谢: - )

1 个答案:

答案 0 :(得分:0)

实现此目的的一种方法是将maven surefire插件的 forkCount 属性设置为1(如果您通过maven surfire插件运行junit测试),或者根本不在插件中指定它在您的POM文件中声明,因为默认值为1.这将导致应用程序上下文仅加载一次。在这种情况下,您需要确保在修改它的测试之后清理上下文。

..
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.16</version>
                <dependencies>
                </dependencies>
                <configuration>
                    <includes>
                        <include>**/*Test.java</include>
                    </includes>
                    <forkCount>1</forkCount>
                </configuration>
            </plugin>
..