經典三層框架初識(二)---Spring 2.4 spring整合Junit
阿新 • • 發佈:2018-11-05
一.Junit
-
Junit簡介
- JUnit是一個Java語言的單元測試框架,用於單元測試.
- 以前我們測試的時候,一般是單獨建立一個測試類,在裡面寫一個main方法來測試我們的程式,但是實質上這樣用main來做測試是不規範的,因為main方式它是一個應用程式的入口,它應該作為主邏輯來執行的,而我們的測試是輔助來做的.其次,一個類只有一個main方法(入口),如果我們現在有很多的程式碼需要測試怎麼辦?以前我們是封裝成很多方法,依次在main裡面呼叫或者是在main裡面測試完一個註釋掉寫下一個,那這樣很麻煩也有很多限制.而 Junit 能很好的解決這個問題,簡化單元測試,寫一點測一點,在編寫以後的程式碼中如果發現問題可以較快的追蹤到問題的原因,減小回歸錯誤的糾錯難度。
-
Junit的使用
- 前提是我們需要匯入Junit的jar包.我們用的eclipse中已經繼承了Junit了,不需要我們去下載jar啦
- 基本步驟:
- ①:選中專案,右鍵Build Path--->Add Libraries...
- ②:彈出來的Add Library介面中,找到 JUnit並選中,點選 next
- ③:彈出的JUnit Library介面,我們在下來框中選擇JUnit4,最後點選finish就可以了.
- 下面我們看一下程式碼
- 下面是我們需要測試的類:
-
package test; public class Test2 { public void f(){ System.out.println("test"); } }
如果我們需要測試上面的f方法,以前我們是下面這麼做的:
-
public static void main(){ Test2 test2 = new Test2(); test2.f(); }
現在我們不用main方法,使用Junit來測試:
-
我們只需要將需要測試的方面上面加上@Test即可.然後滑鼠放在需要測試的方法中,右鍵,Run As ---->JUnit Test.
package test; import org.junit.Test; public class Test2 { @Test public void f(){ System.out.println("test"); } }
執行結果出現如下的綠色橫條,則測試通過,紅色橫條,則測試失敗
-
-
-
上面是簡單模擬Junit的使用,這裡介紹Junit的幾個常用的類似於@Test的註解:
- @Before: 每一個測試方法之前執行
- @After: 每一個測試方法之後執行
- @BeforeClass: 方法必須必須要是靜態方法(static 宣告),所有測試開始之前執行,注意區分before,是所有測試方法
- @AfterClass: 方法必須要是靜態方法(static 宣告),所有測試結束之後執行,注意區分 @After
- @Ignore: 被忽略的測試方法:加上之後,暫時不執行此段程式碼
- 例如上面的例子,我們希望每個測試的方法前面都要先列印before,那麼我們可以下面這樣
-
注意:編寫測試類的原則:
- ①測試方法上必須使用@Test進行修飾
- ②測試方法必須使用public void 進行修飾,不能帶任何的引數
- ③新建一個原始碼目錄來存放我們的測試程式碼,即將測試程式碼和專案業務程式碼分開
- ④測試類所在的包名應該和被測試類所在的包名保持一致
- ⑤測試單元中的每個方法必須可以獨立測試,測試方法間不能有任何的依賴
- ⑥測試類使用Test作為類名的字尾(不是必須)
- ⑦測試方法使用test作為方法名的字首(不是必須)
-
二.Spring整合Junit
- 下面看我們下面的程式碼
-
package test; import org.springframework.beans.factory.annotation.Autowired; import service.UserService; public class Test { @Autowired UserService servie; @org.junit.Test public void test(){ servie.addUser(); servie.deleteUser(); } /*public static void main(String[] args) { ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); UserService service = ac.getBean("userservice", UserService.class); service.addUser(); service.deleteUser(); }*/ }
上面的程式碼時我們前面從容器獲取UserService物件用到的.我們有這樣的思考,UserService這個物件我們的spring中上下文已經通過對包的掃描得到了(也就是它已經在我們的容器中被管理了),那我們能否不需要main方法,通過Junit和依賴注入的方式測試test這個方法呢?但是上面的程式碼能否執行成功呢?答案肯定是不能的.因為我們要把UserService這個成員變數注入的話,有個前提是我們得先把上下文載入了.這裡面上下文都沒有呢,怎麼注入呢?這個時候我們就可以使用spring整合Junit,讓它來實現上下文的載入然後再注入.
-
spring整合Junit的前提:需要匯入一個spring-test-XX.jar的jar包.
package test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import service.Userservice; @RunWith(SpringJUnit4ClassRunner.class)//執行器 @ContextConfiguration(locations="classpath:applicationContext.xml")//載入配置檔案,咱們的配置檔案在src下,所以這裡寫classpath public class Test { @Autowired Userservice service; @org.junit.Test public void test(){ service.addUser(); service.deleteUser(); } }
這裡注意兩點:我們的執行器是spring整合Junit的執行器;另外一個在我們注入成員變數的物件之前,要載入配置檔案,因為載入了配置檔案,才回去掃描這個物件是否在我們容器中管理,只有在管理了並且拿到這個容器之後才能注入.