Spring 3 AbstractTransactionalJUnit4SpringContextTests问题

z888c 2013-03-15 10:31:28
只有testAddUserWhenUserAbsent一个能通过, 其他的均不能通过, 都是internalAddUser之后,TestCase.assertNotNull(user.getId());失败, 如果我不用AbstractTransactionalJUnit4SpringContextTests的话可以,用了就不行, 但是要回滚数据库,所以没有办法啊, 不知道什么原因


@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:dao-spring-context.xml")
public class NgTrackerUserDaoTest extends AbstractTransactionalJUnit4SpringContextTests {

@Resource
private TrackerUserDAO trackerUserDAO;

private NgTrackerUser internalAddUser(String loginId, String password
, String firstName, String lastName, Date registerDate) {
NgTrackerUser user = new NgTrackerUser();
user.setLoginId(loginId);
user.setPassword(password);
user.setFirstName(firstName);
user.setLastName(lastName);
user.setRegisterTime(registerDate);

trackerUserDAO.addUser(user);

return user;
}

@Test
public void testAddUserWhenUserAbsent() throws Exception {
NgTrackerUser user = trackerUserDAO.getUser("user001");

TestCase.assertNull(user);

internalAddUser("user001", "89767", "jerry", "chen", new Date());

user = trackerUserDAO.getUser("user001");

TestCase.assertNotNull(user);
}

@Test(expected = DuplicateKeyException.class)
public void testAddUserWhenUserExists() {
NgTrackerUser user = internalAddUser("user002", "88888", "shrek", "lee", new Date());
TestCase.assertNotNull(user);

internalAddUser("user002", "88888", "shrek", "lee", new Date());
}

@Test
public void testGetUserById() throws Exception {

NgTrackerUser user = internalAddUser("user003", "76567", "tree", "chow", new Date());

TestCase.assertNotNull(user.getId());

user = trackerUserDAO.getUserById(user.getId().intValue());

TestCase.assertNotNull(user);
}

@Test
public void testDelUser() throws Exception {
NgTrackerUser user = internalAddUser("user004", "9999", "jetty", "tai", new Date());

TestCase.assertNotNull(user.getId());

trackerUserDAO.deleteUser(user);

user = trackerUserDAO.getUser("user004");

TestCase.assertNull(user);
}

@Test
public void testUpdateUser() throws Exception {

NgTrackerUser user = internalAddUser("user005", "479161", "chart", "pai", new Date());

TestCase.assertNotNull(user.getId());

user.setAlertEmail("jerry@163.com");
trackerUserDAO.updateUser(user);

user = trackerUserDAO.getUser("user005");

TestCase.assertEquals(user.getAlertEmail(), "jerry@163.com");
}
}


只有testAddUserWhenUserAbsent一个能通过, 其他的均不能通过, 都是internalAddUser之后,TestCase.assertNotNull(user.getId());失败, 如果我不用AbstractTransactionalJUnit4SpringContextTests的话可以,用了就不行, 但是要回滚数据库,所以没有办法啊, 不知道什么原因
...全文
69 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
z888c 2013-03-15
  • 打赏
  • 举报
回复
dao-spring-context.xml 如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>

    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="classpath:c3p0.properties"/>
    </bean>

    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <property name="driverClass"><value>${c3p0.driverClass}</value></property>
        <property name="jdbcUrl"><value>${c3p0.jdbcUrl}</value></property>
        <property name="user"><value>${c3p0.user}</value></property>
        <property name="password"><value>${c3p0.password}</value></property>

        <property name="minPoolSize"><value>${c3p0.minPoolSize}</value></property>
        <property name="maxPoolSize"><value>${c3p0.maxPoolSize}</value></property>
        <property name="maxIdleTime"><value>${c3p0.maxIdleTime}</value></property>
        <property name="acquireIncrement"><value>${c3p0.acquireIncrement}</value></property>
        <property name="maxStatements"><value>${c3p0.maxStatements}</value></property>
        <property name="initialPoolSize"><value>${c3p0.initialPoolSize}</value></property>
        <property name="idleConnectionTestPeriod"><value>${c3p0.idleConnectionTestPeriod}</value></property>
        <property name="acquireRetryAttempts"><value>${c3p0.acquireRetryAttempts}</value></property>
        <property name="breakAfterAcquireFailure"><value>${c3p0.breakAfterAcquireFailure}</value></property>
        <property name="testConnectionOnCheckout"><value>${c3p0.testConnectionOnCheckout}</value></property>
    </bean>

    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>

    <bean id="transactionInterceptor"
          class="org.springframework.transaction.interceptor.TransactionInterceptor">
        <property name="transactionManager" ref="transactionManager" />
        <property name="transactionAttributes">
            <props>
                <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
                <prop key="select*">PROPAGATION_REQUIRED,readOnly</prop>
                <prop key="add*">PROPAGATION_REQUIRED</prop>
                <prop key="insert*">PROPAGATION_REQUIRED</prop>
                <prop key="update*">PROPAGATION_REQUIRED</prop>
                <prop key="delete*">PROPAGATION_REQUIRED</prop>
                <prop key="remove*">PROPAGATION_REQUIRED</prop>
            </props>
        </property>
    </bean>

    <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
        <property name="beanNames">
            <list>
                <value>*DAO</value>
            </list>
        </property>
        <property name="interceptorNames">
            <list>
                <value>transactionInterceptor</value>
            </list>
        </property>
    </bean>

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation"  value="classpath:dao-mybatis-config.xml" />
    </bean>

    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg index="0" ref="sqlSessionFactory" />
    </bean>

    <bean id="trackerDeviceDAO" class="com.topflytech.gps.dao.impl.NgTrackerDeviceDAO">
        <property name="sqlSession" ref="sqlSession"/>
    </bean>

    <bean id="trackerEventDAO" class="com.topflytech.gps.dao.impl.NgTrackerEventDAO">
        <property name="sqlSession" ref="sqlSession"/>
    </bean>

    <bean id="trackerPositionDAO" class="com.topflytech.gps.dao.impl.NgTrackerPositionDAO">
        <property name="sqlSession" ref="sqlSession"/>
    </bean>

    <bean id="trackerUserDAO" class="com.topflytech.gps.dao.impl.NgTrackerUserDAO">
        <property name="sqlSession" ref="sqlSession"/>
    </bean>


</beans>

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧