構建Spring 應用以後呢,編寫單元測試就顯得比較麻煩了,由於絕大部分的類都交給了spring託管了,須要人爲的去加載spring的配置文件等等,或者須要編碼去從spring 哪裏獲得某個類的實例等。
java
1.1 整合SpringTest以前的單元測試編碼spring
public class TestDemo { private static DBDao dbDao; private Object[] testData; @BeforeClass public static void setUpBeforeClass() throws NamingException { // Initialize Spring Context ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml"); dbDao= context.getBean(DBDao .class); } @AfterClass public static void tearDownAfterClass() {} @Before public void setUp() { //prepare test data here testData = {.........}; } @After public void tearDown() { } @Test public void testSave() { dbDao.save(testData) } }
使用SpringTest整個JUnit,也是把Junit的框架整合到Spring容器中,交給spring來託管了,是代碼更簡潔,同時 SpringTest 也提供了許多組件的支持 好比 JDBC的測試, JNDI的測試,以及不少的Mock方法,足以知足J2EE的單元測試的須要了。框架
編寫單元測試 須要 Junit 和SpringTest的jar包依賴,maven構建工具會自行解決依賴關係,因此 SpringTest 依賴的 SpringCore 會被自行導入。maven
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${project.dependency.org.junit}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${project.dependency.spring.core}</version> <scope>test</scope> </dependency>
與常規的測試類的區別在於,使用了註解RunWith(SpringJUnit4ClassRuner.class)來聲明使用Spring的 TestRunner類,同時呢使用ContextConfiguration註解 來聲明 須要加載的 配置文件的路勁,這樣一來就能夠不用自行編碼去加載配置文件啦。工具
同時咱們還能夠發現 測試依賴的類 也被打上註解@Autowired 實行自動裝填。單元測試
總體的結構很簡潔了。
測試
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = "classpath:spring-config-test.xml") public class TestDemo { @Autowired private DBDao dbDao; private Object[] testData; @BeforeClass public static void setUpBeforeClass() throws NamingException {} @AfterClass public static void tearDownAfterClass() {} @Before public void setUp() { //prepare test data here testData = {.........}; } @After public void tearDown() { } @Test public void testSave() { dbDao.save(testData) } }