gpt4 book ai didi

spring - 如何在每次单元测试后重置我的数据库状态而不使整个测试成为事务?

转载 作者:IT老高 更新时间:2023-10-28 13:49:20 26 4
gpt4 key购买 nike

我正在使用 Spring 3.1.1.RELEASE、Hibernate 4.1.0.Final、JPA 2、JUnit 4.8.1 和 HSQL 2.2.7。我想在我的服务方法上运行一些 JUnit 测试,并且在每次测试之后,我希望回滚写入内存数据库的任何数据。但是,我不希望将整个测试视为事务。例如在这个测试中

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({ "classpath:test-context.xml" })
public class ContractServiceTest
{


@Autowired
private ContractService m_contractService;

@Test
public void testUpdateContract()
{
// Add the contract
m_contractService.save(m_contract);
Assert.assertNotNull(m_contract.getId());
// Update the activation date by 6 months.
final Calendar activationDate = Calendar.getInstance();
activationDate.setTime(activationDate.getTime());
activationDate.add(Calendar.MONTH, 6);
m_contract.setActivationDate(activationDate.getTime());
m_contractService.save(m_contract);
final List<Contract> foundContracts = m_contractService.findContractByOppId(m_contract.getOpportunityId());
Assert.assertEquals(foundContracts.get(0), m_contract);
} // testUpdateContract

对服务有三个调用(“m_contractService.save”、“m_contractService.save”和“m_contractService.findContractByOppId”),每个都被视为我想要的事务。但我不知道如何在每次单元测试后将我的内存数据库重置为原始状态。

如果我需要提供其他信息,请告诉我。

最佳答案

由于您使用的是 Hibernate,您可以使用属性 hibernate.hbm2ddl.auto 在每次启动时创建数据库。您还需要在每次测试后强制重新加载 Spring 上下文。您可以使用 @DirtiesContext 注释来做到这一点。

这可能会给您的测试增加一些额外的开销,因此另一种解决方案是手动删除每个表中的数据。

关于spring - 如何在每次单元测试后重置我的数据库状态而不使整个测试成为事务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14343893/

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