成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

junit4備忘錄

TZLLOG / 3177人閱讀

摘要:它由和建立,逐漸成為源于的的家族中最為成功的一個(gè)。與添加進(jìn)入的的依賴中。具有兩個(gè)參數(shù)可選該測(cè)試方法允許執(zhí)行的最大時(shí)間長(zhǎng)度。單位捕獲拋出的異常。這個(gè)類不包含任何方法更改入口類的測(cè)試運(yùn)行器為將要運(yùn)行的測(cè)試類作為數(shù)組傳入到中。

簡(jiǎn)介

JUnit是一個(gè)Java語(yǔ)言的單元測(cè)試框架。它由Kent Beck和Erich Gamma建立,逐漸成為源于Kent Beck的sUnit的xUnit家族中最為成功的一個(gè)。

測(cè)試用例不是用來(lái)證明你(的邏輯)是對(duì)的,而是用來(lái)證明你(的斷言)沒(méi)有錯(cuò)。

junit3與junit4區(qū)別

在JUnit3中需要繼承TestCase類,JUnit4不需要繼承任何類;

在JUnit3中需要覆蓋TestCase中的setUp和tearDown方法,其中setUp方法會(huì)在測(cè)試執(zhí)行前被調(diào)用以完成初始化工作,而tearDown方法則在結(jié)束測(cè)試結(jié)果時(shí)被調(diào)用,用于釋放測(cè)試使用中的資源,而在JUnit4中,只需要在方法前加上@Before,@After ;

在JUnit3中對(duì)某個(gè)方法進(jìn)行測(cè)試時(shí),測(cè)試方法的命令是固定的,例如對(duì)addBook這個(gè)方法進(jìn)行測(cè)試,需要編寫(xiě)名字為tetAddBook的測(cè)試方法,而在JUnit4中沒(méi)有方法命令的約束,在方法的前面加上@Test,這就代表這個(gè)方法是測(cè)試用例中的測(cè)試方法;

新的斷言assertThat;

@BeforeClass 和 @AfterClass 。在JUnit3,如果所有的test case僅調(diào)用一次setUp()和tearDown()需要使用TestSetup類;

測(cè)試異常處理@Test(expected = DataFormatException.class);

設(shè)置超時(shí)@Test(timeout = 1000);

忽略測(cè)試@Ignore;

集成測(cè)試(suiteTest)。

最大的不同是junit4基本用注解實(shí)現(xiàn),更加靈活。

junit4與maven

添加進(jìn)入maven的pom.xml的依賴中。設(shè)置scope為test;


  junit
  junit
  4.12
  test
常用注解

@BeforeClass: public static void方法,當(dāng)前測(cè)試類,所有的測(cè)試方法運(yùn)行前被執(zhí)行;

@Before: public void方法,當(dāng)前測(cè)試類,他會(huì)在所有方法運(yùn)行結(jié)束后被執(zhí)行;

@Test: public void方法,將一個(gè)普通的方法修飾成為一個(gè)測(cè)試方法。具有兩個(gè)參數(shù)(可選):

timeout: 該測(cè)試方法允許執(zhí)行的最大時(shí)間長(zhǎng)度。單位ms

expected: 捕獲拋出的異常。xx.class

@After: public void方法,與@Before組成一對(duì),會(huì)在每個(gè)測(cè)試方法被運(yùn)行后執(zhí)行一次;

@AfterClass: public static void方法,與@BeforeClass組成一對(duì),在當(dāng)前測(cè)試類做完所有測(cè)試后執(zhí)行的一個(gè)方法;

@Ignore: 所修飾的測(cè)試方法會(huì)被測(cè)試運(yùn)行器忽略;

@RunWith: 更改測(cè)試運(yùn)行器,自定義運(yùn)行器需要繼承于org.junit.runner.Runner。

junit4的hello world
import org.junit.*;

public class HelloTest {
    @Test
    public void testAdd(){
        Assert.assertEquals("test add", 3, 1 + 2);
        System.out.print("Test add Ok");
    }
}

測(cè)試方法上必須使用@Test進(jìn)行修飾;

測(cè)試方法必須使用public void 進(jìn)行修飾,不能待任何的參數(shù);

測(cè)試單元中的每個(gè)方法必須可以獨(dú)立測(cè)試,測(cè)試方法間不能有任何的依賴;

測(cè)試類使用Test作為類名的后綴(可選);

測(cè)試方法使用test作為方法名的前綴(可選);

junit4運(yùn)行流程
public class FlowTest {

    @BeforeClass
    public static void init(){
        System.out.println("test class before");
    }

    @AfterClass
    public static void destory(){
        System.out.println("test class after");
    }

    @Before
    public void beforeTest(){
        System.out.println("before test");
    }

    @After
    public void afterTest(){
        System.out.println("after test");
    }

    @Test
    public void testAdd(){
        Assert.assertEquals("test add", 3, 1 + 2);
        System.out.println("test add ok");
    }

    @Test
    public void testSub(){
        Assert.assertEquals("test subtraction", 3, 4 - 1);
        System.out.println("test sub ok");
    }
}

運(yùn)行結(jié)果

test class before
before test
test add ok
after test
before test
test sub ok
after test
test class after

@BeforeClass修飾的方法會(huì)在所有測(cè)試方法調(diào)用前執(zhí)行。該方法為靜態(tài)方法,比較適合加載配置文件。

@AfterClass修飾的方法會(huì)在所有測(cè)試方法調(diào)用后執(zhí)行。該方法為靜態(tài)方法,通常用來(lái)對(duì)資源的清理。比如關(guān)閉數(shù)據(jù)庫(kù)連接。

@Before與@After在每個(gè)測(cè)試方法前后各執(zhí)行一次。

@Test中的參數(shù)
public class TimeOutTest {

    @Test(timeout = 2000)
    public void testTimeOut(){
        while (true){
            System.out.println("I"m running!");
            try {
                Thread.sleep(1000 *1);
            } catch (InterruptedException ignore) {
            }
        }
    }
    
    @Test(expected = ArithmeticException.class)
    public void testException(){
        Assert.assertEquals(3,6/0);
    }
}

運(yùn)行結(jié)果

I"m running!
I"m running!
I"m running!

org.junit.runners.model.TestTimedOutException: test timed out after 2000 milliseconds
    at java.lang.Thread.sleep(Native Method)
    at TimeOutTest.testTimeOut(TimeOutTest.java:15)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        ...

testTimeOut雖然是死循環(huán),但加了@Test(timeout)參數(shù)后還是在2秒運(yùn)行結(jié)束。

testException方法沒(méi)有拋出ArithmeticException,@Test中的expected起作用了。

批量運(yùn)行測(cè)試類-測(cè)試套件(Suite)

我們想運(yùn)行所有的測(cè)試類的測(cè)試方法,難道我們只能一個(gè)一個(gè)運(yùn)行每一個(gè)測(cè)試類么,這多累啊。幸好,junit4給我們提供了一種方式一次運(yùn)行所有的測(cè)試類-測(cè)試套件。使用例子如下:

import org.junit.runner.RunWith;
import org.junit.runners.Suite;

@RunWith(Suite.class)
@Suite.SuiteClasses({FlowTest.class,TimeOutTest.class})
public class SuiteTest {
}

測(cè)試suite就是組織測(cè)試類一起運(yùn)行;

寫(xiě)一個(gè)作為測(cè)試suite的入口類。這個(gè)類不包含任何方法;

更改suite入口類的測(cè)試運(yùn)行器為Suite.class;

將要運(yùn)行的測(cè)試類作為數(shù)組傳入到@Suite.SuiteClasses({})中。

批量運(yùn)行多組測(cè)試用例-測(cè)試參數(shù)化設(shè)置

很多時(shí)候,我們需要對(duì)一個(gè)測(cè)試,輸入多組測(cè)試用例來(lái)驗(yàn)證代碼的正確性。在junit4中,我們不需要編寫(xiě)n個(gè)測(cè)試方法。示例如下:

import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import java.util.Arrays;
import java.util.Collection;

@RunWith(Parameterized.class)
public class ParamsTest {
    private int expected;
    private int input1;
    private int input2;
    
    public ParamsTest(int expected, int input1, int input2){
        this.expected = expected;
        this.input1 = input1;
        this.input2 = input2;
    }

    @Parameterized.Parameters
    public static Collection params(){
        return Arrays.asList(new Object[][]{
                {3,2,1},
                {4,1,4}
        });
    }

    @Test
    public void testAdd(){
        Assert.assertEquals("add function",this.expected,this.input1 + this.input2);
    }
}

運(yùn)行結(jié)果

java.lang.AssertionError: add function 
Expected :4
Actual   :5
 
    at org.junit.Assert.fail(Assert.java:88)
    at org.junit.Assert.failNotEquals(Assert.java:834)
    at org.junit.Assert.assertEquals(Assert.java:645)
    at ParamsTest.testAdd(ParamsTest.java:34)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        ...

第一組測(cè)試通過(guò),第2組沒(méi)有

更改默認(rèn)的測(cè)試運(yùn)行器為@RunWith(Parameterized.class);

聲明變量來(lái)存放預(yù)期值(隨便起名字,class中自己使用,expected/input1/input2);

為測(cè)試類聲明一個(gè)帶有參數(shù)的公共構(gòu)造器,并在其中為之聲明變量賦值;

聲明一個(gè)返回值為Collection的公共靜態(tài)方法 并用@Parameterized.Parameters進(jìn)行修飾。

他山之石

junit官網(wǎng)getstart: https://github.com/junit-team/junit4/wiki/Getting-started

junit4入門(mén)視頻: http://www.imooc.com/learn/356

junit4手冊(cè):http://wiki.jikexueyuan.com/project/junit/suite-test.html

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/66260.html

相關(guān)文章

  • ABAP和Java SpringBoot的單元測(cè)試

    摘要:在類里,本地類里用關(guān)鍵字聲明過(guò)的方法,在單元測(cè)試啟動(dòng)后會(huì)自動(dòng)被調(diào)用到。在及的設(shè)定思路里,放在路徑下面以結(jié)尾的類會(huì)被當(dāng)成單元測(cè)試類處理。 ABAP 在ABAP類里,本地類(Local Class)里用關(guān)鍵字FOR TESTING聲明過(guò)的方法,showImg(https://segmentfault.com/img/remote/1460000016898407); 在單元測(cè)試啟動(dòng)后會(huì)自動(dòng)...

    fireflow 評(píng)論0 收藏0
  • springboot整合elasticsearch

    摘要:會(huì)把真實(shí)值乘以這個(gè)因子后存儲(chǔ),取出時(shí)再還原。日期類型可以對(duì)日期格式化為字符串存儲(chǔ),但是建議我們存儲(chǔ)為毫秒值,存儲(chǔ)為,節(jié)省空間。 最近在學(xué)習(xí)es,起碼要先有個(gè)es環(huán)境吧,然后再是整合到代碼中使用一下,畢竟只有實(shí)踐才會(huì)有深刻的記憶,這就是所謂的經(jīng)驗(yàn)啊,下面開(kāi)始吧,本文分兩部分,第一部分配置es環(huán)境,第二部分整合到springboot中進(jìn)行簡(jiǎn)單的操作,本人也是初次學(xué)習(xí),如有錯(cuò)誤歡迎指出修正,...

    Corwien 評(píng)論0 收藏0
  • UnsupportedOperationException

    摘要:本周在寫(xiě)單元測(cè)試的時(shí)候遇見(jiàn)了一個(gè)新的,在此記錄一下。通過(guò)查看的源碼果然是這樣沒(méi)有重寫(xiě)的但為什么會(huì)調(diào)用方法呢 本周在寫(xiě)單元測(cè)試的時(shí)候遇見(jiàn)了一個(gè)新的exception,在此記錄一下。 單元測(cè)試中有一段代碼是這樣的: logger.debug(設(shè)置班級(jí)的學(xué)生); klass.setStudentList(Collections.singletonList(student1)); ...

    LiangJ 評(píng)論0 收藏0
  • Spring Boot - 單元測(cè)試(Junit4&Mockito)

    摘要:當(dāng)面講給你聽(tīng)講堂地址,或許是最實(shí)用的教程,新課促銷中,只要你敢來(lái),保你收貨滿滿。優(yōu)惠報(bào)名全程擼碼快速入門(mén)教程全原價(jià),優(yōu)惠價(jià)全程擼碼進(jìn)階全原價(jià),優(yōu)惠價(jià) 回顧 Spring Boot - 初識(shí) Hello World Spring Boot - Servlet、過(guò)濾器、監(jiān)聽(tīng)器、攔截器 Spring Boot - 靜態(tài)資源處理、啟動(dòng)加載、日志處理 Spring Boot - 部署Deplo...

    raoyi 評(píng)論0 收藏0
  • Java JUnit 單元測(cè)試小結(jié)

    摘要:一旦你完成了相應(yīng)函數(shù),只需要把注解刪去,就可以進(jìn)行正常的測(cè)試。表示該方法只執(zhí)行一次,并且在所有方法之后執(zhí)行。 測(cè)試類型 單元測(cè)試(Unit test) 單元測(cè)試關(guān)注單一的類. 它們存在的目的是檢查這個(gè)類中的代碼是否按照期望正確運(yùn)行. 集成測(cè)試(Integration test) 顧名思義, 集成測(cè)試是檢查開(kāi)發(fā)的模塊和其他模塊整合時(shí)是否正常工作.雖然集成測(cè)試的代碼影響范圍比單元測(cè)試要廣,...

    Rainie 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<