HDa*_*ave 12 junit dbunit spring-test
Spring Test有助于回滚在测试方法中对数据库所做的任何更改.这意味着在每种测试方法之前没有必要花时间删除/重新加载测试数据.
但是如果使用@BeforeClass Junit注释,则会强制数据加载器保持静态.这里探讨的一个问题: 为什么jUnit的fixtureSetup必须是静态的?
如果数据初始化方法是静态的,那么数据连接方法和数据源也必须......以及......强制一切都是静态的......这是行不通的.在这一点上,我问 - 当你必须为每次测试删除/重新加载测试数据时,Spring Test能够回滚更改有什么用处?!?!
Kkk*_*kev 14
一种方法是创建"数据初始化"类,将其添加到也具有数据源的测试Spring应用程序上下文中,并将此应用程序上下文连接到测试中.这依赖于Spring在测试调用之间缓存应用程序上下文的事实.
例如,测试超类:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:test-application-context.xml"})
@Transactional
public abstract class DataLoadingTest {
@Autowired
protected DatabaseInitialiser databaseInitialiser;
}
Run Code Online (Sandbox Code Playgroud)
用test-application-context.xml:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="dataSource" .../>
<bean class="DatabaseInitialiser">
<property name="dataSource" ref="dataSource"/>
</bean>
</beans>
Run Code Online (Sandbox Code Playgroud)
和
public class DatabaseInitialiser extends JdbcDaoSupport {
@PostConstruct
public void load() {
// Initialise your database here: create schema, use DBUnit to load data, etc.
}
}
Run Code Online (Sandbox Code Playgroud)
在这个例子中:
DataLoadingTest;DatabaseInitialiser.load()通过@PostConstruct注释来调用;DatabaseInitialiser来自应用程序上下文的调用,该应用程序上下文已经被缓存;同样,DatabaseInitialiser可以使用注释的方法@PostDestroy在整个测试运行结束时执行必要的回滚.
| 归档时间: |
|
| 查看次数: |
9863 次 |
| 最近记录: |