国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Java單元測試入門

cfanr / 2589人閱讀

摘要:三使用介紹通過代碼創(chuàng)建通過注解四常用方法驗證方法沒有被調用驗證方法被調用了次方法至少被調用次方法最多被調用次備注假如你無法給你程序寫單元測試,那么意味著你的程序結構有問題,需要調整或重構。

Java單元測試入門

什么是單元測試

定義:單元測試是對軟件或程序的基本(最小)組成單元的測試
對象:方法、類
特點:

為什么要寫單元測試

需不需要寫單元測試

只要程序能運行就可以了,寫單元測試浪費時間
代碼很簡單不需要單元測試
我保證不會有什么問題的
測試人員測試一下就可以了
這次沒有時間寫了,下次補上吧

測試分類

單元測試->集成測試->端到端測試

各測試占比

Junit介紹

Junit例子

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

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

常用注解

@Ignore 

    該注解標記的測試方法在測試中會被忽略

@Test

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

@RunWith

    @RunWith(Suite.class)                 測試集運行器配合使用測試集功能
    @RunWith(JUnit4.class)                默認運行器
    @RunWith(Parameterized.class)         參數(shù)化運行器
    @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;
    //構造函數(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)    測試a是否等于b(a和b是原始類型數(shù)值(primitive value)或者必須為實現(xiàn)比較而具有equal方法)

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

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

assertNotNull(a)      測試a是否非空,a是一個對象或者null。

assertNull(a)         測試a是否為null,a是一個對象或者null。

assertNotSame(a, b)   測試a和b是否沒有都引用同一個對象。

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

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

assertThat(expected, Matcher)  通過Matcher斷言

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

建議

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

一個案例只寫一個斷言。

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

測試場景

準備數(shù)據(jù)

測試執(zhí)行

斷言

Mock介紹

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



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

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

replay階段:通過調用被測代碼,執(zhí)行測試。期間會invoke 到 第一階段record的mock對象或方法。

verify階段:驗證。可以驗證調用返回是否正確。及mock的方法調用次數(shù),順序等。

三、Mockito使用介紹

通過代碼創(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.    ????}
通過注解
    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");?       驗證add方法沒有被調用
    verify(mock,?times(2)).add("twice");?      驗證add方法被調用了2次
    verify(mock, atLeast(n)).someMethod();     方法至少被調用n次
    verify(mock, atMost(n)).someMethod();      方法最多被調用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);
備注
假如你無法給你程序寫單元測試,那么意味著你的程序結構有問題,需要調整或重構。

對待測試代碼要向生產(chǎn)代碼一樣,測試代碼也需要重構和維護。

3Q

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

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/71415.html

相關文章

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

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

    lentoo 評論0 收藏0
  • Spring Boot 2.x基礎教程:快速入門

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

    tigerZH 評論0 收藏0
  • Android單元測試 - 幾個重要問題

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

    ChristmasBoy 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<