gpt4 book ai didi

hibernate - Spring 和 JUnit 注释测试 : creating fixtures in separate transactions

转载 作者:行者123 更新时间:2023-12-01 09:38:55 26 4
gpt4 key购买 nike

我正在使用 Spring 和 JUnit 测试我的 Hibernate DAO。

我希望每个测试方法都从预先填充的数据库开始,即 Java 对象已保存在数据库中,在已提交的 Hibernate 事务中。我该怎么做?

使用@After 和@Before,方法在与@Test 和@Transactional 修饰的方法相同的Hibernate 事务中执行(在真正的测试方法开始时,第一级缓存可能不会被刷新)。 @BeforeTransaction 和 @AfterTransaction 显然不能与 Hibernate 一起使用,因为即使方法除了 @Before/AfterTransaction 之外还使用 @Transactional 注释,它们也不会创建事务。

有什么建议吗?

最佳答案

一种方法是使用事务方法将初始化逻辑外部化到外部服务,这些事务方法从测试类中的 @BeforeTransaction 和 @AfterTransaction 注释方法执行。

这种方法的另一个好处是初始化代码在测试之间的可重用性。

例如,您可以使用 SpringJunit4ClassRunner,如 here 所述。像这样:

@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
}

}

这是我们在基于 Spring 的项目中所做的事情。

确保 transactional configuration是正确的。如果要避免类/接口(interface)分离,则在元素中将 proxy-target-class 设置为 true。

关于hibernate - Spring 和 JUnit 注释测试 : creating fixtures in separate transactions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2914725/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com