是否可以在JUNIT中的插入/更新中测试插入?
我的spring-servlet.xml
<context:component-scan base-package="com.isad" />
<mvc:annotation-driven />
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
<value>/WEB-INF/jsp/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
<bean id="sessionFactory" scope="singleton"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
<bean id ="transactionManager" class = "org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name = "sessionFactory" ref = "sessionFactory"/>
</bean>
我的测试配置:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"classpath:spring-servlet.xml"})
@TransactionConfiguration(transactionManager="transactionManager",defaultRollback=true)
@Transactional
public class TestItem {
@Autowired CategoryService catManager;
@Test
public void testItem() {
//System.out.println("Begin Test");
Category cat = new Category();
cat.setType(CategoryType.BOOK);
cat.setSubCategory("Business Book");
cat.setDescription("One Thing");
catManager.addCategory(cat);
}
}
这是我运行上面代码所得到的stackstrace:
Hibernate: insert into CATEGORY (DESCRIPTION, SUB_CAT, CAT_TYPE) values (?, ?, ?)
INFO | 2014-09-04 18:46:50,844 | TransactionalTestExecutionListener.java | 298 | Rolled back transaction after test execution for test context [DefaultTestContext@76f3da25 testClass = TestItem, testInstance = com.isad.test.dao.TestItem@376f026, testMethod = testItem@TestItem, testException = [null], mergedContextConfiguration = [MergedContextConfiguration@75905090 testClass = TestItem, locations = '{classpath:spring-servlet.xml}', classes = '{}', contextInitializerClasses = '[]', activeProfiles = '{}', contextLoader = 'org.springframework.test.context.support.DelegatingSmartContextLoader', parent = [null]]]
INFO | 2014-09-04 18:46:50,847 | AbstractApplicationContext.java | 873 | Closing org.springframework.context.support.GenericApplicationContext@17372afb: startup date [Thu Sep 04 18:46:48 PDT 2014]; root of context hierarchy
我遇到的问题是插入和更新,我的其他方法,如删除工作正常。
答案 0 :(得分:1)
您的测试成功,但由于这是一个测试,并且您已指定defaultRollback=true
,因此当测试方法结束时,对数据库所做的任何更改都将被回滚。
我将假设您的服务中有一个方法,该方法对此COUNT(*)
个对象运行等效的Category
语句
如果您确实想测试插入是否成功,请尝试以下代码:
@Test
public void testInsertItem(){
int countPreInsert = catManager.count();
Category cat = new Category();
cat.setType(CategoryType.BOOK);
cat.setSubCategory("Business Book");
cat.setDescription("One Thing");
catManager.addCategory(cat);
int countPostInsert = catManager.count();
assertEqual("Exactly one record was not inserted in the database",
countPreInsert + 1, countPostInsert)
}
您不必进行任何清理,因为TransactionalTestExecutionListener
会在测试结束时自动回滚您的插入语句。
如果您想测试更新,请在更新前后进行计数,并断言它们都相等,以确保Hibernate不会插入或删除任何记录。
快乐测试!