1. 程式人生 > >SpringBoot使用Junit單元測試

SpringBoot使用Junit單元測試

SpringBoot + mybatis

開發工具:IntelliJ IDEA

1.pom.xml


一般使用idea新建一個SpringBoot web專案時,一般都會自動引入此依賴,如果沒有,請手動引入。

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>


2.測試類基類


新建的專案,一般會有test包和test類,結構如下:

如果沒有,我們自己建立一個,由於一個專案中我們會寫很多很多測試類,而測試類上面是需要以下幾個註解的,每建一個類都去補註解,太麻煩,我們就在這個類中加上註解,其他測試類直接繼承這個類就好了:

package com.alibaba;
 
import org.junit.After;
import org.junit.Before;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.context.web.WebAppConfiguration;
 
@RunWith(SpringRunner.class)

//需要指定啟動類,否則會報錯
@SpringBootTest(classes = AmroApplication.class,webEnvironment=SpringBootTest.WebEnvironment.RANDOM_PORT)
//由於是Web專案,Junit需要模擬ServletContext,因此我們需要給我們的測試類加上@WebAppConfiguration。
@WebAppConfiguration
public class TmallApplicationTests {
 
    @Before
    public void init() {
        System.out.println("開始測試-----------------");
    }
 
    @After
    public void after() {
        System.out.println("測試結束-----------------");
    }
}


3.controller,service,dao等,省略,就是普通方法,普通介面


4.測試類


我這裡建一個測試類,繼承基類,然後測試我service中的兩個方法

package com.alibaba;
 
import com.alibaba.service.EntFileService;
import org.junit.Assert;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
 
/**
 * Created by lightClouds917
 * Date 2018/2/2
 * Description:測試類
 */
public class EntFileTest extends TmallApplicationTests {
 
 
    @Autowired
    private EntFileService entFileService;
    //@Ignore("not ready yet")
    @Test
    public void testGetEntFileById(){
        Assert.assertSame("企業數量有誤",500,entFileService.getCount());
    }
 
    @Test
    public void testGetEntFileList(){
        Assert.assertSame("企業數量不為10",10,entFileService.getEntFileList());
    }
}
如上,直接@Autowired引入你想測試的類就好,然後繼承基類,測試方法上面要加@Test註解。
然後,第一個測試方法:我想測試一下企業數量是不是600,引數意義:

第一個引數:如果測試不通過,會丟擲此訊息,此引數可不要;

第二個引數:我預期的值,我這裡希望他查出來的結果是600;

第三個引數:是實際的結果,就是我們呼叫方法返回的結果;

我們可以看一下Assert類的原始碼:


    /**
     * Asserts that two objects refer to the same object. If they are not, an
     * {@link AssertionError} is thrown with the given message.
     *
     * @param message the identifying message for the {@link AssertionError} (<code>null</code>
     * okay)
     * @param expected the expected object
     * @param actual the object to compare to <code>expected</code>
     */
    static public void assertSame(String message, Object expected, Object actual) {
        if (expected == actual) {
            return;
        }
        failNotSame(message, expected, actual);
    }
 
    /**
     * Asserts that two objects refer to the same object. If they are not the
     * same, an {@link AssertionError} without a message is thrown.
     *
     * @param expected the expected object
     * @param actual the object to compare to <code>expected</code>
     */
    static public void assertSame(Object expected, Object actual) {
        assertSame(null, expected, actual);
    }


5.執行測試用例


執行有兩種方法:

1.選中方法,右鍵,然後run 。。。;

2.點選方法前的小標;

具體操作如下截圖:

現在看執行結果,如下圖:

區塊一:這裡是測試用例的執行結果,由於未獲得預期結果,打印出了我們提前設定的錯誤資訊。

區塊二:這是測試用例的覆蓋率,類的覆蓋,方法的覆蓋,行數的覆蓋,非常詳細。

區塊三:此區塊是預期結果和實際結果的詳細對比,點選後才會顯示,如圖點選位置。

關於Assert中,還有很多斷言方法,方法名字很規範,看名字就知道怎麼用了,這裡不再過多說明。

6.打包測試


專案開發完後,我們寫了100個測試用例類,我不能每個類都點選進去,然後慢慢執行,SpringBoot提供了打包測試的方式:我們用一個類,把所有的測試類整理進去,然後直接執行這個類,所有的測試類都會執行。

我這裡建了兩個測試類,分別是EntFileTest,EntFileTest2,現在我打包進TestSuits,讓他們一次執行:

@Suite.SuiteClasses({EntFileTest.class,EntFileTest2.class})


打包完整程式碼:

package com.alibaba;
 
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
 
/**
 * Created by lightClouds917
 * Date 2018/2/2
 * Description:打包測試
 */
//@Ignore("not ready yet")
@RunWith(Suite.class)
@Suite.SuiteClasses({EntFileTest.class,EntFileTest2.class})
public class TestSuits {
 
    //不用寫程式碼,只需要註解即可
}


7.忽略方法


當我一個測試類寫了10個測試方法時,其中有1個我暫時不想測,想跳過,但是其他9個我想一次執行,怎麼辦?這裡有一個忽略註解,寫在方法上,可以忽略這個測試方法,寫在類上,可以忽略這個類。

package com.alibaba;
 
import com.alibaba.service.EntFileService;
import org.junit.Assert;
import org.junit.Ignore;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
 
/**
 * Created by lightClouds917
 * Date 2018/2/2
 * Description:測試類
 */
public class EntFileTest extends TmallApplicationTests {
 
 
    @Autowired
    private EntFileService entFileService;
 
    @Ignore("not ready yet")
    @Test
    public void testGetEntFileById(){
        Assert.assertSame("企業數量有誤",600,entFileService.getCount());
    }
 
    @Test
    public void testGetEntFileList(){
        Assert.assertSame("企業數量不為10",10,entFileService.getEntFileList());
    }
}
此時,執行這個測試類,testGetEntFileById()方法就會忽略執行。
--------------------- 
作者:lightClouds917 
來源:CSDN 
原文:https://blog.csdn.net/weixin_39800144/article/details/79241620 
版權宣告:本文為博主原創文章,轉載請附上博文連結!