Fra*_*ois 3 junit spring annotations hibernate
我正在使用Spring和JUnit测试我的Hibernate DAO.
我希望每个测试方法都以预先填充的DB开始,即Java对象已经保存在DB中,已经提交的Hibernate事务中.我怎样才能做到这一点?
使用@After和@Before,方法在与@Test和@Transactional装饰的方法相同的Hibernate事务中执行(在实际测试方法启动时,第一级缓存可能不会刷新).@BeforeTransaction和@AfterTransaction显然无法与Hibernate一起使用,因为除了@ Before/AfterTransaction之外,即使使用@Transactional注释方法,它们也不会创建事务.
有什么建议吗?
一种方法是使用事务方法将您的初始化逻辑外部化到外部服务,这些方法是从测试类中的@BeforeTransaction和@AfterTransaction注释方法执行的.
这种方法的另一个好处是初始化代码跨测试的可重用性.
例如,你可以使用像描述基于SpringJUnit4ClassRunner 这里是这样的:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"testContext.xml","services.xml"})
public class MyServiceTest {
@Autowired
private TestDataService testDataService;
@Before
public void setUp(){
testDataService.addTestData();
}
@Test
public void testSomething() throws Exception {
// ...
}
}
public interface TestDataService {
void addTestData();
}
public class TestDataServiceImpl implements TestDataService {
@Transactional
public void addTestData(){
// TODO
}
}
Run Code Online (Sandbox Code Playgroud)
这是我们在基于Spring的项目中所做的事情.
确保事务配置正确.如果要避免类/接口分离,请在元素中将proxy-target-class设置为true.
| 归档时间: |
|
| 查看次数: |
4315 次 |
| 最近记录: |