我的数据库有一个dao层。现在,我正在为此编写一些集成测试。我想知道是否应该在测试类中使用 @Transactional 或 @Rollback ,因为它们都会将更改都还原到数据库中。哪一种是良好做法,在什么情况下?
我尝试同时使用它们,在我的情况下它们都可以工作。我的课上有一个@Before注释方法。
@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
}
答案 0 :(得分:0)
同意@michael根本不进行测试@transactional(但要进行服务层),这意味着通过测试调用的所有服务层/持久层方法都将启动其自身的事务(您使它们成为事务性的,您?),并在提交时清除更改。因此,您一定会注意到是否有某些东西在冲洗时炸毁,并且很可能在一段时间后会出现一个充满垃圾测试数据的数据库
答案 1 :(得分:0)
对数据库的运行测试通常将通过集成测试来完成。为了简单起见,您可以使用所需的方言设置h2。准备数据库结构并运行所需的服务调用。声明预期结果,并将测试方法标记为肮脏的上下文(作为批注),或在每次测试时重置数据库,否则保存的测试结果可能会影响另一个测试。这样,您还可以测试服务的事务处理。
将事务性添加到测试中将改变您的业务逻辑行为。将这些内容排除在测试之外。