Spring hibernate-无法测试插入
我正在尝试使用junit测试来测试我的服务层。除插入外,所有操作均按预期工作 这是我的配置插入测试用例:Spring hibernate-无法测试插入,spring,hibernate,spring-mvc,Spring,Hibernate,Spring Mvc,我正在尝试使用junit测试来测试我的服务层。除插入外,所有操作均按预期工作 这是我的配置插入测试用例: @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration({"classpath:spring-servlet.xml"}) @TransactionConfiguration(transactionManager="transactionManager",defaultRollback=true) public class
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"classpath:spring-servlet.xml"})
@TransactionConfiguration(transactionManager="transactionManager",defaultRollback=true)
public class TestUserAccountDao {
@Autowired
UserAccountService userManager;
UserAccount newUser;
@Before
public void init() {
newUser = new UserAccount();
newUser.setUsername("TestUser");
newUser.setEmail("testEmail@gmail.com");
newUser.setPassword("123456");
}
@After
public void tearDown() {
//userManager.remove(newUser);
newUser = null;
}
/** test: void add(UserAccount)
* */
@Test //@Transactional
public void testAdd() {
System.out.println(newUser);
userManager.add(newUser);
/*Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
session.save(newUser);
session.getTransaction().commit();
session.close();*/
}
我遇到的问题是,当我涉及userManager.add(newUser)时,UserAccount不会持久保存到数据库中。但是,如果我切换到使用通信会话,它将非常有效。我不认为我的spring-servlet.xml有任何问题,因为我可以成功地测试其他方法,而且我没有对add()做任何复杂的操作,只需session.save(UserAccount)
这是我得到的stacktrace:
INFO | 2014-09-05 10:12:43,268 | TransactionalTestExecutionListener.java | 298 | Rolled back transaction after test execution for test context [DefaultTestContext@44d46936 testClass = TestUserAccountDao, testInstance = com.isad.test.dao.TestUserAccountDao@55477b87, testMethod = testValidateLoginByName@TestUserAccountDao, testException = [null], mergedContextConfiguration = [MergedContextConfiguration@47ff07ce testClass = TestUserAccountDao, locations = '{classpath:spring-servlet.xml}', classes = '{}', contextInitializerClasses = '[]', activeProfiles = '{}', contextLoader = 'org.springframework.test.context.support.DelegatingSmartContextLoader', parent = [null]]]
INFO | 2014-09-05 10:12:43,271 | TransactionalTestExecutionListener.java | 276 | Began transaction (2) for test context [DefaultTestContext@44d46936 testClass = TestUserAccountDao, testInstance = com.isad.test.dao.TestUserAccountDao@2dda03f0, testMethod = testValidateLoginByEmail@TestUserAccountDao, testException = [null], mergedContextConfiguration = [MergedContextConfiguration@47ff07ce testClass = TestUserAccountDao, locations = '{classpath:spring-servlet.xml}', classes = '{}', contextInitializerClasses = '[]', activeProfiles = '{}', contextLoader = 'org.springframework.test.context.support.DelegatingSmartContextLoader', parent = [null]]]; transaction manager [org.springframework.orm.hibernate4.HibernateTransactionManager@38598a4f]; rollback [true]
事务通常由服务层管理(在您的案例中,使用Spring
@Transactional
对服务方法进行注释)。所以,当您测试它时,您不必处理事务(您不必打开和关闭它)
如果你想单元测试你的服务层,你必须用Mockito模拟你的DAO(持久层)