如题,本人使用Spring提供的AbstractTransactionalDataSourceSpringContextTests对服务层进行集成测试
测试的目的是向数据库插入一条记录,然后立即检索出来。下面是我的测试代码:
public void testSaveUser() { User newUser = createUser(); try { userService.saveUser(newUser); assertTrue(true); //setComplete(); String sql = "Select USERNAME from NEWSLETTER_USER where UPPER(USERNAME)= ?"; String userName = (String) jdbcTemplate.queryForObject(sql, new Object[] { "PAUL" }, java.lang.String.class); assertNotNull(userName); assertEquals(userName, newUser.getUserName()); } catch (NewsletterException ne) { fail(ne.getMessage()); } }
|
请注意该方法里面的setComplete()方法,一开始我并没有提交事务,于是出现了saveUser执行成功,但jdbcTemplate.queryForObject执行时查询不到记录,导致assertNotNull(userName)处失败。
后来我把setComplete()处的注释去掉,再次测试。发现数据库中已经有了一条记录,将SQL语句拷贝到数据库中执行可以返回正确的结果,但使用jdbcTemplate查询依然失败,同样提示查询不到记录。
请问这是为什么?为什么在提交后还查不到数据?