一步步實現(xiàn)持續(xù)集成(八)執(zhí)行單元測試

本章將在Jenkins中自動執(zhí)行單元測試腳本,并生成測試報告。使用了較為方便的Spock測試框架,非常值得在Java項目的單元測試中推廣應用。

(一)使用Spock框架進行自動化單元測試

  1. Spock的介紹

談到java的單元測試框架,一般常用的是JUnit,但我們今天推薦的單元測試框架是Spock。

Spock是基于groovy和Java語言的框架,它的特點是能夠高效方便的進行編碼和展示測試結(jié)果。Spock用groovy語言編寫,groovy語言是基于Java的,語法很多類似Python,Java程序員可以無縫掌握。

Spock框架的優(yōu)點很多。除了繼承了groovy的方便的語法外,還有兩個比較重要的優(yōu)點:

  • 方法名稱、輸入輸出都可以用字符串表示,并出現(xiàn)在測試報告內(nèi)。這樣,直接通過方法名稱和輸入輸出名稱,就能直觀的看到測試了哪些內(nèi)容。
  • 測試結(jié)果能夠很直觀的展現(xiàn),便于查找問題,這是區(qū)別于Junit最明顯的一點。

Spock的幾個優(yōu)點我們會在后面的案例里逐步演示。

  1. pom的配置

要在代碼中使用Spock框架,首先當然是在pom中聲明依賴項。Spock的依賴項可以分為兩個部分,一個是框架本身的依賴項,一個是生成測試報告的依賴項,具體的配置項如下所示。

</plugins> 
<plugin>
  <artifactId>maven-surefire-plugin</artifactId>
     <version>2.6</version>
     <configuration>
    <userFile>false</userFile>
     <includes>
     <include>**/*Spec.java</include>
    <include>**/*Test.java</include>
     </includes>
     </configuration>

   </plugin>
  </plugins>
   </build>

  <dependencies>
    <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
  <scope>test</scope>
  </dependency>
  <dependency>
  <groupId>org.spockframework</groupId>
  <artifactId>spock-core</artifactId>
  <version>1.1-groovy-2.4</version>
  <scope>test</scope>
  </dependency>
  <dependency>
  <groupId>org.codehaus.groovy</groupId>
  <artifactId>groovy-all</artifactId>
  <version>2.4.4</version>
  <scope>test</scope>
  </dependency>

  <!---->
  <!-- 單元測試報告 -->
  <dependency>
  <groupId>com.athaydes</groupId>
  <artifactId>spock-reports</artifactId>
  <version>1.6.1</version>
  <scope>test</scope>
  <!-- this avoids affecting your version of Groovy/Spock -->
  <exclusions>
    <exclusion>
    <groupId>*</groupId>
    <artifactId>*</artifactId>
    </exclusion>
    </exclusions>
  </dependency>

  <!-- // if you don't already have slf4j-api and an implementation of it in the classpath, add this! -->
  <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.13</version>
    <scope>test</scope>
    </dependency>
    <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-simple</artifactId>
    <version>1.7.13</version>
    <scope>test</scope>
   </dependency>
  1. 單元測試的編碼

下面使用Spock開發(fā)單元測試編碼。簡單的對一個變量賦值方法進行測試。方法所在的類如下所示。

public class test {
    int i;
    public String j;
    public String AAA;

    public void mytest() {
    if(AAA !=j)
        j = AAA;
  }
}

方法的測試代碼如下所示。

class myTest extends spock.lang.Specification{

    def "測試基本功能"(){

        given:"賦初始值"
        def test1 = new test()
        test1.j = j
        test1.AAA = a

        when:"執(zhí)行賦值語句"
        test1.mytest()

        then:"兩個值相等"
        test1.j == test1.AAA

        where:"給定初始值"
        j        | a
        "01"     |  "02"
    }
}

測試結(jié)果如圖所示,明顯測試已通過。


測試已通過.jpg

通過上面的測試代碼可以發(fā)現(xiàn),Spock的語法是非常直觀方便的,測試內(nèi)容,輸入輸出都能夠通過命名一目了然。

為了進一步演示Spock的特點,我們將測試要求做一點修改,將兩個變量判等,修改為判不等,那么測試當然是無法通過的,我們看看對于測試失敗的情況,Spock會如何顯示,顯示結(jié)果見下圖。


1.將測試結(jié)果修改為將失敗.jpg

由圖中可見,Spock對于失敗的測試,清晰的顯示了輸入輸出和最終失敗的原因。

2.Spock的結(jié)果展示.jpg
  1. 測試結(jié)果和報告

Spock對于測試報告也有非常直觀的顯示方式,有專用的spock-reports插件進行測報顯示。測報效果如圖。


3.spock測報顯示效果.jpg
  1. 代碼提交遠程服務器

至此,我們的單元測試腳本已經(jīng)編碼執(zhí)行完畢,需要將代碼提交到遠程服務器,準備交由Jenkins去執(zhí)行。設置好遠程服務器地址,add和commit代碼后,就可以push到遠程服務器了。

(二)Jenkins的配置

  1. 任務配置

要在Jenkins內(nèi)自動進行單元測試,需要在兩個位置進行配置。一個是在編譯時,配置maven來執(zhí)行test部分代碼,一個是在編譯后,向Jenkins指定測試報告路徑,在Jenkins任務內(nèi)顯示單元測報。下面我們來看具體配置。


Jenkins任務配置.jpg
  1. 執(zhí)行結(jié)果

在Jenkins內(nèi)進行手工構建,執(zhí)行結(jié)果見下圖。在頁面上可以點擊測報的超鏈接,進一步查看測報。

任務頁面的測報鏈接.jpg
3.spock測報顯示效果.jpg

總結(jié)

至此,我們完成了在Jenkins內(nèi)的自動化單元測試腳本的執(zhí)行和生成測報。通過本章,我們接觸了Spock這一方便的Java項目測試框架,大家有興趣可以進一步了解groovy和Spock。另外對于Jenkins內(nèi)的單元測試調(diào)用配置也是非常方便,通過本章也能有個大概的了解。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容