問題描述:我利用Springtest與junit結合測試,出現bean註解失敗,test測試代碼如下:
- package org.sparkant.test;
- import org.junit.Test;
- import org.junit.runner.RunWith;
- import org.sparkant.common.object.PackageData;
- import org.sparkant.service.test.TestService;
- import org.springframework.test.context.ContextConfiguration;
- import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
- import javax.annotation.Resource;
- /**
- * 測試mybits連接數據
- * Created by hjs on 15/9/9.
- */
- @RunWith(SpringJUnit4ClassRunner.class)
- @ContextConfiguration(locations = "/applicationContext.xml")
- public class TestMybatis{
- @Resource
- private TestService testService;
- @Test
- public void test() throws Exception{
- PackageData packageData = new PackageData();
- packageData.put("userId", 1);
- testService.findUser(packageData);
- }
- }
解決方法:
經過檢查原來是沒有繼承AbstractJUnit4SpringContextTests 或 AbstractTransactionalJUnit4SpringContextTests
對於 AbstractJUnit4springcontextTests 和 AbstractTransactionalJUnit4SpringContextTests 類的選擇:
如果再你的測試類中,需要用到事務管理(比如要在測試結果出來之後回滾測試內容),就可以使用AbstractTransactionalJUnit4SpringTests類。 事務管理的使用方法和正常使用spring事務管理是一樣的。再此需要注意的是,如果想要使用聲明式事務管理,即使用 AbstractTransactionalJUnitSpringContextTests類,請在applicationContext.xml文件 中加入transactionManager bean:
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
如果沒有添加上述bean,將會拋出NoSuchBeanDefinitionException,指明 No bean named 'transactionManager' is definded.
OK修改後的代碼如下- package org.sparkant.test;
- import org.junit.Test;
- import org.junit.runner.RunWith;
- import org.sparkant.common.object.PackageData;
- import org.sparkant.service.test.TestService;
- import org.springframework.test.context.ContextConfiguration;
- import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests;
- import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
- import javax.annotation.Resource;
- /**
- * 測試mybits連接數據
- * Created by hjs on 15/9/9.
- */
- @RunWith(SpringJUnit4ClassRunner.class)
- @ContextConfiguration(locations = "/applicationContext.xml")
- public class TestMybatis extends AbstractTransactionalJUnit4SpringContextTests{
- @Resource
- private TestService testService;
- @Test
- public void test() throws Exception{
- PackageData packageData = new PackageData();
- packageData.put("userId", 1);
- testService.findUser(packageData);
- }
- }
ok 希望幫到大家,少走彎路。