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

資訊專欄INFORMATION COLUMN

Java單元測(cè)試入門

cfanr / 2596人閱讀

摘要:三使用介紹通過(guò)代碼創(chuàng)建通過(guò)注解四常用方法驗(yàn)證方法沒(méi)有被調(diào)用驗(yàn)證方法被調(diào)用了次方法至少被調(diào)用次方法最多被調(diào)用次備注假如你無(wú)法給你程序?qū)憜卧獪y(cè)試,那么意味著你的程序結(jié)構(gòu)有問(wèn)題,需要調(diào)整或重構(gòu)。

Java單元測(cè)試入門

什么是單元測(cè)試

定義:單元測(cè)試是對(duì)軟件或程序的基本(最?。┙M成單元的測(cè)試
對(duì)象:方法、類
特點(diǎn):

為什么要寫單元測(cè)試

需不需要寫單元測(cè)試

只要程序能運(yùn)行就可以了,寫單元測(cè)試?yán)速M(fèi)時(shí)間
代碼很簡(jiǎn)單不需要單元測(cè)試
我保證不會(huì)有什么問(wèn)題的
測(cè)試人員測(cè)試一下就可以了
這次沒(méi)有時(shí)間寫了,下次補(bǔ)上吧

測(cè)試分類

單元測(cè)試->集成測(cè)試->端到端測(cè)試

各測(cè)試占比

Junit介紹

Junit例子

import org.junit.*;
import static org.junit.Assert.fail;

public class ClassNameTest {
    @BeforeClass    //公開(kāi)表態(tài)無(wú)返回值
    public static void beforeClass() throws Exception{
        //每次測(cè)試類執(zhí)行前執(zhí)行一次,主要用來(lái)初使化公共資源等
    }
    @AfterClass     //公開(kāi)表態(tài)無(wú)返回值
    public static void afterClass() throws Exception{
        //每次測(cè)試類執(zhí)行完成后執(zhí)行一次,主要用來(lái)釋放資源或清理工作
    }
    @Before
    public void setup() throws Exception {
        //每個(gè)測(cè)試案例執(zhí)行前都會(huì)執(zhí)行一次
    }
    @After
    public void teardown() throws Exception {
        //每個(gè)測(cè)試案例執(zhí)行完成后都會(huì)執(zhí)行一次
    }
    @Test
    public void testMethodName_give_…_when_…_then_…() {
        fail("失敗");
    }
}

常用注解

@Ignore 

    該注解標(biāo)記的測(cè)試方法在測(cè)試中會(huì)被忽略

@Test

    @Test(expected=xxxException.class)   斷言該方法會(huì)拋出異常
    @Test(timeout=1000)                  執(zhí)行時(shí)間超過(guò)設(shè)置的值該案例會(huì)失敗

@RunWith

    @RunWith(Suite.class)                 測(cè)試集運(yùn)行器配合使用測(cè)試集功能
    @RunWith(JUnit4.class)                默認(rèn)運(yùn)行器
    @RunWith(Parameterized.class)         參數(shù)化運(yùn)行器
    @RunWith(Suite.class)
    @Suite.SuiteClasses({ CalculatorTest.class,SquareTest.class})

@Rule
public class ExpectedExceptionsTest {
    @Rule
    public ExpectedException thrown = ExpectedException.none();
    @Test
    public void verifiesTypeAndMessage() {
        thrown.expect(RuntimeException.class);
        thrown.expectMessage("Runtime exception occurred");
        throw new RuntimeException("Runtime exception occurred");
    }
}

參數(shù)化

@RunWith(Parameterized.class)
public class PrimeFactorTest {
    private PrimeFactor primeFactor;
    private int input;
    private List expected;
    //構(gòu)造函數(shù)
    public PrimeFactorTest(int input, List expected) {
        this.input = input;
        this.expected = expected;
    }
    @Parameterized.Parameters
    public static Collection init() {
        return Arrays.asList(new Object[][]{
             {18, Arrays.asList(2, 3, 3)}
        });
    }
    @Test
    public void testFactor_when_input_18_then_must_return_2_3_3() {
        Assert.assertEquals(expected, primeFactor.factor(input));
    }
}

斷言

常用的斷言方法如下:
assertEquals(a, b)    測(cè)試a是否等于b(a和b是原始類型數(shù)值(primitive value)或者必須為實(shí)現(xiàn)比較而具有equal方法)

assertFalse(a)        測(cè)試a是否為false(假),a是一個(gè)Boolean數(shù)值。

assertTrue(a)???????  測(cè)試a是否為true(真),a是一個(gè)Boolean數(shù)值

assertNotNull(a)      測(cè)試a是否非空,a是一個(gè)對(duì)象或者null。

assertNull(a)         測(cè)試a是否為null,a是一個(gè)對(duì)象或者null。

assertNotSame(a, b)   測(cè)試a和b是否沒(méi)有都引用同一個(gè)對(duì)象。

assertSame(a, b)??    測(cè)試a和b是否都引用同一個(gè)對(duì)象。

fail(string)?         Fail讓測(cè)試失敗,并給出指定信息。

assertThat(expected, Matcher)  通過(guò)Matcher斷言

Hamcrest :greaterThan,greaterThanOrEqualTo,lessThan,anything,anyOf,containsString

建議

使用give when then方式命名你的測(cè)試方法名稱。

一個(gè)案例只寫一個(gè)斷言。

要寫注釋,建議分為如下4步驟。

測(cè)試場(chǎng)景

準(zhǔn)備數(shù)據(jù)

測(cè)試執(zhí)行

斷言

Mock介紹

一、mock就是在測(cè)試過(guò)程中,對(duì)于某些不容易構(gòu)造或者不容易獲取的對(duì)象,用一個(gè)虛擬的對(duì)象來(lái)創(chuàng)建以便測(cè)試的測(cè)試方法,這個(gè)虛擬的對(duì)象就是mock對(duì)象。mock對(duì)象就是真實(shí)對(duì)象在調(diào)試期間的代替品。
Java常用Mock
EasyMock、JMock、PowerMock、Mockit等



二、Mock工具的原理
?mock工具工作的原理大都如下:

record階段:錄制期望。也可以理解為數(shù)據(jù)準(zhǔn)備階段。創(chuàng)建依賴的class 或interface或method ,模擬返回的數(shù)據(jù),及調(diào)用的次數(shù)等。

replay階段:通過(guò)調(diào)用被測(cè)代碼,執(zhí)行測(cè)試。期間會(huì)invoke 到 第一階段record的mock對(duì)象或方法。

verify階段:驗(yàn)證??梢则?yàn)證調(diào)用返回是否正確。及mock的方法調(diào)用次數(shù),順序等。

三、Mockito使用介紹

通過(guò)代碼創(chuàng)建
    1.    public?class?UserServiceTest?{??
    2.    ????private?UserService?userService;??
    3.    ????private?UserDao?mockUserDao;??
    4.    ????@Before??
    5.    ????public?void?setUp()?{
    6.    ????????mockUserDao?=?mock(UserDao.class);??
    7.    ????????userService?=?new?UserServiceImpl();??
    8.    ????????userService.setUserDao(mockUserDao);??
    9.    ????}
通過(guò)注解
    1.    public?class?UserServiceTest?{??
    2.    ?
    3.    ????@InjectMocks
    4.    ????private?UserServiceImpl?userService;??
    5.    ??
    6.    ????@Mock??
    7.    ????private?UserDao?mockUserDao;??
    8.    ??
    9.    ????@Before??
    10.    ????public?void?setUp()?{??
    11.    ????????MockitoAnnotations.initMocks(this);??
    12.    ????}

四、Mockito常用方法

verify
    verify(mock,?never()).add("twice");?       驗(yàn)證add方法沒(méi)有被調(diào)用
    verify(mock,?times(2)).add("twice");?      驗(yàn)證add方法被調(diào)用了2次
    verify(mock, atLeast(n)).someMethod();     方法至少被調(diào)用n次
    verify(mock, atMost(n)).someMethod();      方法最多被調(diào)用n次
when
    when(mock.someMethod()).thenReturn(value1).thenReturn(value2);
    when(mock.get(0)).thenReturn("first");?
    when(mock.get(1)).thenThrow(new?RuntimeException());
    when(mock.get(anyInt())).thenReturn("element");?
spy
    List?spy?=?spy(new?LinkedList());
    when(spy.get(0)).thenReturn(“foo");
    doReturn("foo").when(spy).get(0);
備注
假如你無(wú)法給你程序?qū)憜卧獪y(cè)試,那么意味著你的程序結(jié)構(gòu)有問(wèn)題,需要調(diào)整或重構(gòu)。

對(duì)待測(cè)試代碼要向生產(chǎn)代碼一樣,測(cè)試代碼也需要重構(gòu)和維護(hù)。

3Q

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

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

相關(guān)文章

  • Spring Boot快速入門(五):使用MyBatis(注解形式)進(jìn)行數(shù)據(jù)庫(kù)操作

    摘要:添加依賴新建項(xiàng)目選擇三個(gè)依賴對(duì)于已存在的項(xiàng)目可以在加入,將會(huì)幫你自動(dòng)配置好配置基本信息然后在下添加基本配置數(shù)據(jù)庫(kù)連接地址數(shù)據(jù)庫(kù)賬號(hào)數(shù)據(jù)庫(kù)密碼數(shù)據(jù)庫(kù)驅(qū)動(dòng)創(chuàng)建實(shí)體創(chuàng)建一個(gè)實(shí)體,包含姓名年齡屬性創(chuàng)建數(shù)據(jù)訪問(wèn)接口創(chuàng)建一個(gè) 添加依賴 新建項(xiàng)目選擇web,MyBatis,MySQL三個(gè)依賴 showImg(https://segmentfault.com/img/bV2l1L?w=1684&h=1...

    lentoo 評(píng)論0 收藏0
  • Spring Boot 2.x基礎(chǔ)教程:快速入門

    摘要:編寫一個(gè)接口創(chuàng)建命名為根據(jù)實(shí)際情況修改創(chuàng)建類,內(nèi)容如下啟動(dòng)主程序,使用等工具發(fā)起請(qǐng)求,可以看到頁(yè)面返回編寫單元測(cè)試用例打開(kāi)的下的測(cè)試入口類。 簡(jiǎn)介 在您第1次接觸和學(xué)習(xí)Spring框架的時(shí)候,是否因?yàn)槠浞彪s的配置而退卻了?在你第n次使用Spring框架的時(shí)候,是否覺(jué)得一堆反復(fù)黏貼的配置有一些厭煩?那么您就不妨來(lái)試試使用Spring Boot來(lái)讓你更易上手,更簡(jiǎn)單快捷地構(gòu)建Spring應(yīng)...

    tigerZH 評(píng)論0 收藏0
  • Android單元測(cè)試 - 幾個(gè)重要問(wèn)題

    摘要:言歸正傳,上一篇文章單元測(cè)試如何開(kāi)始介紹了幾款單元測(cè)試框架基本用法依賴隔離概念,本篇主要解答單元測(cè)試中幾個(gè)重要問(wèn)題。在單元測(cè)試交流微信群,很多新進(jìn)來(lái)的小伙伴,都會(huì)幾個(gè)大同小異的問(wèn)題。 showImg(/img/bVEpaD?w=1080&h=715); 原文鏈接:http://www.jianshu.com/p/f5d197a4d83a 前言 已經(jīng)一個(gè)月沒(méi)寫文章了,由于9月份在plan...

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

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

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<