我已经阅读了很多关于这个主题的建议,但似乎没有一个可行。 目前,应用程序上下文是为每个测试类创建的,但我希望它只创建一次并被所有测试类使用。
这是我的测试套件设置:
@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测试使用的单个上下文?
谢谢: - )
答案 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>
..