我使用Spring Initializer,嵌入式Tomcat,Thymeleaf模板引擎和包作为可执行的JAR文件生成了一个Spring Boot Web应用程序。
使用的技术:
Spring Boot 1.4.2.RELEASE,Spring 4.3.4.RELEASE,Thymeleaf 2.1.5.RELEASE,Tomcat Embed 8.5.6,Maven 3,Java 8
我有这个测试,这是失败的,因为Junit测试没有回滚插入java.lang.AssertionError: expected:<1> but was:<2>
@ContextConfiguration(classes={PersistenceConfig.class})
@RunWith(SpringRunner.class)
public class JdbcGuardianRepositoryTests {
@Autowired
private JdbcGuardianRepository repository;
@Test
public void testGetAllGuardians() throws DataAccessException, SQLException {
assertEquals(1, repository.getAllGuardians(null).size());
}
@Test
@Rollback
public void testInsetGuardian() throws DataAccessException, SQLException {
Guardian newGuardian = new Guardian();
newGuardian.setDescription("bob desc");
newGuardian.setEmail("bob@gmail.com");
newGuardian.setId(Sequencer.getNextVal());
newGuardian.setMobile("123456789");
newGuardian.setName("bob");
newGuardian.setSurName("bob surname");
assertNotEquals(-1, repository.insert(newGuardian));
}
}
答案 0 :(得分:0)
@Rollback
注释仅在事务管理通过Jpa / Hibernate / JdbcTemplate发生时才起作用(仅当事务由某些PlatformTransactionManager
管理时,注释对事务的影响)。
看起来JdbcGuardianRepository
使用普通的jdbc访问(或类似的东西),而spring对你的交易一无所知。
考虑使用JPA来管理交易,并且您将解决问题。
或者,您可以使用@Sql("/clean-db.sql")
注释测试类,并在clean-db.sql
内提供一些清理sql代码。 Spring将在每次测试运行之前运行此脚本。
如果这不能解决您的问题,请考虑添加有关JdbcGuardianRepository
的更多信息。