mic*_*ele 3 java spring applicationcontext
我有这个配置类:
@ComponentScan(
basePackages = {
"mypackage.controller",
"mypackage.service",
"mypackage.repository"
}
)
@TestPropertySource(locations="classpath:configuration.properties")
@Import({
H2Configuration.class
})
public class TestConfiguration {
}
@Configuration
public class H2Configuration {
@Bean
public DataSource dataSource() throws SQLException {
EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder();
EmbeddedDatabase db = builder
.setType(EmbeddedDatabaseType.H2)
.addScript("h2/create.sql")
.addScript("h2/insert.sql")
.build();
db.getConnection().setAutoCommit(false);
return db;
}
}
Run Code Online (Sandbox Code Playgroud)
我有这两个班级测试:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader=AnnotationConfigContextLoader.class, classes = { TestConfiguration.class })
public class FirstRepositoryTest {
@Autowired
MyFirstRepositoryImpl repository;
@Before
public void initTest() {
}
@Test(expected = NullPointerException.class)
public void testNullRecords() {
repository.foo(null, null);
}
}
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader=AnnotationConfigContextLoader.class, classes = { TestConfiguration.class })
public class SecondRepositoryTest {
@Autowired
MySecondRepositoryImpl repository;
@Before
public void initTest() {
}
@Test(expected = NullPointerException.class)
public void testSomethingNullRecords() {
repository.something(null, null);
}
}
Run Code Online (Sandbox Code Playgroud)
如果我为每个类运行一次 junit 测试,一切都会顺利。
在全新安装阶段测试失败,因为应用程序上下文被初始化了两次。
例如,它尝试创建 h2 表两次并执行 insert.sql 脚本两次。
我必须做什么才能初始化 h2 数据库,以便仅初始化一次应用程序上下文?
谢谢
我认为您可以开始查看有关集成测试的 Spring 文档。
使用事务测试进行集成测试 () 也是一个很好的做法@Transactional,它会在每个测试结束时进行回滚:请参阅事务管理。
为了避免为每个测试类重新创建的成本ApplicationContext,可以按照此处的说明使用缓存:上下文缓存。
对于与嵌入式数据库的集成测试,您还可以找到文档:使用嵌入式数据库测试数据访问逻辑。上一个链接中的注释,与您的用例相匹配:
但是,如果您希望创建在测试套件中共享的嵌入式数据库,请考虑使用 Spring TestContext Framework 并将嵌入式数据库配置为 Spring ApplicationContext 中的 bean,如使用 Spring XML 创建嵌入式数据库和创建以编程方式嵌入数据库。
我希望您能找到一些有用的参考。
| 归档时间: |
|
| 查看次数: |
4697 次 |
| 最近记录: |