我为数据库有一个dao层。现在,我正在为此编写一些集成测试。我想知道是否应在测试类中使用@transactional @Rollback @rollback ,因为它们都还原了数据库的更改。哪一个是良好的做法,在什么情况下?
我尝试使用两者,他们都在我的情况下工作。我的班级有一个@be的注释方法。
@RunWith(SpringRunner.class)
@AutoConfigureTestDatabase(replace = NONE)
@DataJpaTest
// @Transactional or @Rollback?
public class TestDao {
@Autowired
private ConcreteDao concreteDao;
@Before
public void cleanUp(){ . . . }
@Test
public void testSaveAllEntries(){ . . . }
// and other tests
}
同意@michael不会完全进行测试 @transactional(但是您的服务层(这意味着您通过测试调用的所有服务层/持久性层方法都会启动自己的启动交易(您使它们交易,是吗?(,并在提交时冲洗了更改。因此,您可以保证注意到是否有些东西爆炸了,很可能过了一段时间后,一个装满垃圾测试数据的数据库
使用数据库运行测试通常会通过集成测试完成。为了简单起见,您可以使用所需的方言设置H2。准备数据库结构并运行您需要的服务调用。断言预期结果并将测试方法标记为污垢上下文(作为注释(,或在每个测试中重置数据库,否则保存的测试结果可能会影响另一项测试。通过这种方式,您还可以测试服务的交易处理。
在测试中添加交易将改变您的业务逻辑行为。将这些放在测试中。