我在Spring測試新的,我已經成功地根據文件一步一步跑了很多單位的測試,但我有一些問題:彈簧測試情境範圍
1可以將所有的TestCase使用全球Spring上下文
現在我配置每個TeseCase這樣Spring上下文:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(.....)
@Transactional
public class UserDaoTests {}
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(.....)
@Transactional
public class AccoutDaoTests {}
如圖所示,彈簧將加載並一次又一次地摧毀相同的上下文。
所以我想知道我是否可以設置一個全局Spring上下文,然後讓所有的TestCases在這個上下文中運行?
2事務管理
它說,事務管理器將回滾操作到數據庫。
但我還沒有找到在這種情況下此功能將工作。
因爲在我的應用程序中,我使用ORMLite而不是Spring JDBC。
這是配置:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- our daos -->
<bean id="ormliteSource" class="com.j256.ormlite.jdbc.DataSourceConnectionSource" init-method="initialize">
<constructor-arg index="0" ref="dataSource"/>
<constructor-arg index="1" value="${jdbc.url}"/>
</bean>
<bean id="userDao" class="com.j256.ormlite.spring.DaoFactory" factory-method="createDao">
<constructor-arg index="0" ref="ormliteSource"/>
<constructor-arg index="1" value="com.springapp.model.User"/>
</bean>
然後在我的測試案例:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(..)
@Transactional
public class UserDaoTests {
@Autowired
private Dao<User, Long> userDao;
@Test
public void testCreate() {
User u = new User();
u.setName("ysl");
u.setLocked(true);
try {
userDao.create(u);
} catch (SQLException e) {
log.error(e.getMessage());
e.printStackTrace();
}
}
}
然後運行測試,我發現所有的測試都順利通過,但是當我檢查數據庫後,發現有一些測試數據插入,看起來回滾不起作用。
我錯過了什麼嗎?