Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring hibernate-无法测试插入_Spring_Hibernate_Spring Mvc - Fatal编程技术网

Spring hibernate-无法测试插入

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

我正在尝试使用junit测试来测试我的服务层。除插入外,所有操作均按预期工作

这是我的配置插入测试用例:

@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(持久层)