我对spring相当陌生,正在做一些集成测试。使用Hibernate、MySql和Spring数据JPA。我正在使用事务支持,在每个测试结束时都会回滚所有内容。
例如:
@Test (expected=DataIntegrityViolationException.class)
public void findAndDelete() {
UUID uuid = UUID.fromString(TESTID);
User user= iUserService.findOne(uuid);
iUserService.delete(cashBox);
iUserService.flush();
assertNull(iUserService.findOne(uuid));
}
在上面的代码中,我调用iUserService。flush(),以便将sql发送到DB,并发生预期的DataIntegrityViolationException,因为存在从用户到另一个表的外键(不允许级联,无)。到目前为止一切都很好。
现在,如果我删除iUserService。flush()则不会发生预期的异常,因为sql不会发送到DB。
我尝试将flush()添加到teardown@After方法中,但这不起作用,因为测试看不到测试方法之外的异常。
有没有办法避免在测试方法中调用刷新?
如果我的团队中的开发人员在他们的测试代码中不必使用flush方法,这将是更好的选择
编辑:我尝试添加以下内容
@Before
public void before() {
Session session = entityManagerFactory.createEntityManager().unwrap(Session.class);
session.setFlushMode(FlushMode.ALWAYS);
}
但在每次查询之前,它似乎都会刷新SQL。
依我拙见,这比你团队的开发人员知道他们在做什么要好。
它包括默认配置的内容及其后果。
请看一下为什么在测试ORM代码时需要避免误报
未能配置Spring Boot进行集成测试。冷你请看一下下面的代码: 实体 存储 库 测试配置 应用程序属性 测试用例 我尝试了不同的配置(其最新版本),但一直出现相同的异常: 更奇怪的是,异常的本质是让spring boot根据实体注释自动生成模式。因此,在插入的时候,spring必须创建表,但是看起来它并没有创建。如果有人给我一个想法,我做错了什么,或者如果有人已经面临这样的问题-请让我知道。
假设我有一个测试来断言系统中新用户的注册是否真的成功: 现在,这将在实际数据库中创建一个新的测试用户,因为我希望这个测试在实际环境中运行。这意味着测试不能一直运行,对吗?我应该如何进行此类测试?那些使用系统的实际环境并操纵真实数据的人?
问题内容: 是否有人对从集成测试框架(如Selenium)进行的回滚数据库事务的最佳实践或首选方式有任何建议? 这是当前的情况:我们有一个.net Web项目,其中包含许多在单元测试环境中可以正常工作的单元测试- 每个测试都继承一个父类,该父类在[SetUp]中打开一个事务,并在其中回滚该事务。 [TearDown]。每次测试后,我们的单元测试数据库都恢复到原始状态。 但是,一旦进入集成环境,情况
我有一组Junit测试用例。所有测试用例都必须针对不同的数据库环境执行。在junit测试中使用“@RunWith(SpringJUnit4ClassRunner.class)”时,Spring Boot应用程序只启动一次。但我需要用不同的配置重新启动应用程序,包括flyway迁移和其他与环境相关的应用程序-
我正在使用Spring boot framework(V2.0.2)构建一个REST服务,其中我有在数据库上运行的集成测试。我搜索了很多关于在测试前清理数据库的文章,但不幸的是,我发现它们要么效率低,要么是一个黑客,不适合Spring Boot。你能不能,请忍耐一下,给我一个解决这个问题的好办法? 理想情况下,我认为不应该在每次测试之前清除数据库,而是在一组测试之前清除数据库,比如suite或每个
主要内容:1. 项目依赖,2. Spring组件,3. TestNG + Spring在本教程中,我们将演示如何使用TestNG测试Spring的组件。 使用的工具 : TestNG 6.8.7 Spring 3.2.2.RELEASE Maven 3 Eclipse IDE 1. 项目依赖 为了演示,首先创建一个名称为:TestngSpringIntegration 的 Maven 项目。 要将Spring与TestNG集成,您需要包依懒,添加以下内容: 创建文件:pom.xml