• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于Feed4JUnit架構(gòu)的單元測(cè)試技術(shù)研究與應(yīng)用

    2014-09-24 12:09:35楊鵬
    軟件工程 2014年7期
    關(guān)鍵詞:單元測(cè)試測(cè)試數(shù)據(jù)套件

    楊鵬

    摘要:軟件測(cè)試技術(shù)在軟件質(zhì)量控制過(guò)程中一直起著非常重要的作用。JUnit是被廣泛應(yīng)用的Java單元測(cè)試框架,主要測(cè)試基于java語(yǔ)言編寫的程序代碼,用于編寫和運(yùn)行可重復(fù)的測(cè)試。Feed4JUnit是開(kāi)源的基于JUnit的擴(kuò)展,通過(guò)使用Feed4JUnit提供的注釋,用戶可以很方便地把測(cè)試數(shù)據(jù)存放在文件或其他數(shù)據(jù)源。本文分析了應(yīng)用Feed4JUnit進(jìn)行單元測(cè)試的方法,并通過(guò)實(shí)際開(kāi)發(fā)示例實(shí)現(xiàn)數(shù)據(jù)與代碼分離的測(cè)試。

    關(guān)鍵詞:Feed4JUnit架構(gòu);單元測(cè)試;數(shù)據(jù)源

    中圖分類號(hào):TP311.52 文獻(xiàn)標(biāo)識(shí)碼:A

    Research on Unit Testing Technology Based on Feed4JUnit Architecture

    YANG Peng

    (School of Information Engineering Guangzhou Panyu Polytechnic,Guangzhou 511483,China)

    Abstract:Software testing technology has been under the control of software processto use is very important.Unit is the Java unit test framework is widely used,mainly used for testing the class and method based on the Java language,Feed4JUnit is the extension of JUnit based on open source, using the Feed4JUnit annotation,the usercan be very convenient to test the data stored in a file or other data source.This paperanalyzes the application of Feed4JUnit unit test methods,and through the actualexample of developing,realize the separation of data and code test.

    Keywords:Feed4JUnit;unit test;data source

    1 引言(Introduction)

    單元測(cè)試(Unit Testing),是指對(duì)軟件中的最小可測(cè)試單元進(jìn)行檢查和驗(yàn)證。對(duì)于單元測(cè)試中單元的含義,一般來(lái)說(shuō),要根據(jù)實(shí)際情況去判定其具體含義,如C語(yǔ)言中單元指一個(gè)函數(shù)[1],Java里單元指一個(gè)類,圖形化的軟件中可以指一個(gè)窗口或一個(gè)菜單等??偟膩?lái)說(shuō),單元就是人為規(guī)定的最小的被測(cè)功能模塊[2]。單元測(cè)試是在軟件開(kāi)發(fā)過(guò)程中要進(jìn)行的最低級(jí)別的測(cè)試活動(dòng),軟件的獨(dú)立單元將在與程序的其他部分相隔離的情況下進(jìn)行測(cè)試[3]。單元測(cè)試不僅僅保證代碼在方法級(jí)別的正確性,它還能改進(jìn)設(shè)計(jì),易于對(duì)代碼重構(gòu)[4]。凡是容易編寫單元測(cè)試的代碼,往往是優(yōu)秀的設(shè)計(jì)和松耦合的組件,凡是難于編寫單元測(cè)試的代碼,往往是設(shè)計(jì)不佳和耦合度高的系統(tǒng)[5]。因此,編寫單元測(cè)試不僅僅是掌握單元測(cè)試柜架的用法,更重要的是在編寫單元測(cè)試的過(guò)程中發(fā)現(xiàn)設(shè)計(jì)缺陷,改進(jìn)系統(tǒng)結(jié)構(gòu),從而實(shí)現(xiàn)良好的可擴(kuò)展性。

    任何一個(gè)項(xiàng)目,單元測(cè)試應(yīng)該在詳細(xì)設(shè)計(jì)之后開(kāi)始進(jìn)行,首先根據(jù)詳細(xì)設(shè)計(jì)文檔進(jìn)行單元測(cè)試用例的編寫,編寫完成后進(jìn)行代碼開(kāi)發(fā),代碼完成后運(yùn)行單元測(cè)試,如果通過(guò),則該方法可以發(fā)布運(yùn)行,如果不通過(guò)需要進(jìn)行代碼改造,再進(jìn)行單元測(cè)試,直到單元測(cè)試運(yùn)行通過(guò)為止。

    2 Junit單元測(cè)試架構(gòu)(Junit unit test framework)

    JUnit是由Erich Gamma和Kent Beck編寫的一個(gè)回歸測(cè)試框架(Regression Testing Framework)。Junit測(cè)試是程序員測(cè)試,即所謂白盒測(cè)試,因?yàn)槌绦騿T知道被測(cè)試的軟件如何(How)完成功能和完成什么樣(What)的功能。Junit是一套框架,繼承TestCase類,就可以用Junit進(jìn)行自動(dòng)測(cè)試了。通常來(lái)說(shuō),在極限編程中,基本過(guò)程是這樣的:構(gòu)思→編寫測(cè)試代碼→編寫代碼→測(cè)試,而且編寫測(cè)試和編寫代碼都是增量式的,寫一點(diǎn)測(cè)一點(diǎn),在編寫以后的代碼中如果發(fā)現(xiàn)問(wèn)題可以較快的追蹤到問(wèn)題的原因,減小回歸錯(cuò)誤的糾錯(cuò)難度,如圖1所示的是Junit基本架構(gòu)。

    圖1 Junit基本架構(gòu)

    Fig.1 The basic architecture of Junit

    在Junit類中,有很多定義類。Test:是TestCase、TestSuite的共同接口。run(TestResult)用來(lái)運(yùn)行Test,并且將結(jié)果保存到TestResult。TestCase:Test的接口的抽象實(shí)現(xiàn),是Abstract類,所以不能實(shí)例化,能被繼承。其中一個(gè)構(gòu)造函數(shù)TestCase(String Name),根據(jù)輸入的參數(shù),創(chuàng)建一個(gè)測(cè)試實(shí)例。參數(shù)為該類的以test開(kāi)頭的方法名,把它添加到TestSuite中,指定僅僅運(yùn)行TestCase中的一個(gè)方法。

    TestSuite:實(shí)現(xiàn)Test接口??梢越M裝一個(gè)或者多個(gè)TestCase。待測(cè)試類中可能包括了對(duì)被測(cè)類的多個(gè)TestCase,而TestSuit可以保存多個(gè)TestCase,負(fù)責(zé)收集這些測(cè)試,這樣就可以一個(gè)Suite就能運(yùn)行對(duì)被測(cè)類的多個(gè)測(cè)試。TestResult:保存TestCase運(yùn)行中的事件。TestResult有ListfFailures和ListfErrors。fFailures記錄Test運(yùn)行中的AssertionFailedError,而fErrors則記錄Exception。Failure是當(dāng)期望值和斷言不匹配的時(shí)候拋出的異常,而Error則是不曾預(yù)料到的異常,如:ArrayIndexOutOfBoundsException。TestListener:是個(gè)接口,對(duì)事件監(jiān)聽(tīng),可供TestRunner類使用。

    ResultPrinter:實(shí)現(xiàn)TestListener接口。在TestCase運(yùn)行過(guò)程中,對(duì)所監(jiān)聽(tīng)的對(duì)象的事件以一定格式及時(shí)輸出,運(yùn)行完后,對(duì)TestResult對(duì)象進(jìn)行分析,輸出的統(tǒng)計(jì)結(jié)果。BaseTestRunner:所有TestRunner的超類。java Junit.swingui.TestRunner:實(shí)BaseTestRunner,提供圖形界面。java Junit.textui.TestRunner:實(shí)現(xiàn)BaseTestRunner,提供文本界面。下面將以它做為例子講解JUnit生命周期。

    3 JUnit4測(cè)試實(shí)例(JUnit4 test examples)

    在應(yīng)用程序的業(yè)務(wù)邏輯中存在大量的這樣的接口:他們接受不同的輸入,然后進(jìn)行或驗(yàn)證、或處理,進(jìn)而完成相同的流程。比如網(wǎng)站的登錄入口,用戶名和密碼都有長(zhǎng)度的限制,同時(shí)也具有是否允許特殊字符的限制等,所以在我們進(jìn)行其單元測(cè)試的過(guò)程中,根據(jù)不同長(zhǎng)度的用戶名和密碼,以及不同的字符組合,只需要提供相同的測(cè)試代碼結(jié)構(gòu),就能完成測(cè)試,不同的僅僅測(cè)試數(shù)據(jù)與期望值,但是因?yàn)槊恳粋€(gè)測(cè)試方法中的輸入?yún)?shù)不同,我們必須為每一個(gè)輸入組編寫單獨(dú)的測(cè)試用例,從而產(chǎn)生大量冗余代碼,十分不便于維護(hù)。

    將Java對(duì)象名稱(每個(gè)單詞的頭字母大寫)按照數(shù)據(jù)庫(kù)命名的習(xí)慣進(jìn)行格式化,格式化后的數(shù)據(jù)為小寫字母,并且使用下劃線分割命名單詞,要求對(duì)輸入數(shù)據(jù)進(jìn)行非法驗(yàn)證。

    首先新建一個(gè)TestJUnit。打開(kāi)項(xiàng)目TestJUnit的屬性頁(yè)→選擇“Java Build Path”子選項(xiàng)→點(diǎn)選“Add Library…”按鈕→在彈出的“Add Library”對(duì)話框中選擇JUnit(圖2),并在下一頁(yè)中選擇版本4.1后點(diǎn)擊“Finish”按鈕。

    圖2 JUnit 運(yùn)行測(cè)試界面

    Fig.2 JUnit run the test interface

    在JUnit運(yùn)行界面提示有兩個(gè)測(cè)試情況未通過(guò),當(dāng)首字母大寫時(shí)得到的處理結(jié)果與預(yù)期的有偏差,造成測(cè)試失?。欢?dāng)測(cè)試對(duì) null的處理結(jié)果時(shí),則直接拋出了異常,測(cè)試錯(cuò)誤。

    JUnit將測(cè)試失敗的情況分為兩種:failure和error。Failure一般由單元測(cè)試使用的斷言方法判斷失敗引起,它表示在測(cè)試點(diǎn)發(fā)現(xiàn)了問(wèn)題;而error則是由代碼異常引起,這是測(cè)試目的之外的發(fā)現(xiàn),它可能產(chǎn)生于測(cè)試代碼本身的錯(cuò)誤(測(cè)試代碼也是代碼,同樣無(wú)法保證完全沒(méi)有缺陷),也可能是被測(cè)試代碼中的一個(gè)隱藏的bug。顯然,被測(cè)試代碼中并沒(méi)有對(duì)首字母大寫和null這兩種特殊情況進(jìn)行處理,現(xiàn)在對(duì)源代碼進(jìn)行修改,添加對(duì)這兩種情況的處理,代碼如下:

    package sample.test;

    import static org.junit.Assert.assertEquals;

    import java.util.Arrays;

    import java.util.Collection;

    import org.junit.Test;

    import org.junit.runner.RunWith;

    import org.junit.runners.Parameterized;

    import org.junit.runners.Parameterized.Parameters;

    import sample.code.UserAccess;

    /*

    * JUnit - Parameter test sample

    */

    @RunWith(Parameterized.class)

    public class JunitSample {

    private String user;

    private String pw;

    private boolean expected;

    @Parameters

    public static Collection dataGenerater() {

    return Arrays.asList(new Object[][] {

    { "user01", "123456", true },

    { "helloworld", "123456", false },

    { "david", "re*ads", false },

    { "goodone", "onegood", true } });

    }

    public JunitSample(String user, String pw, boolean expected) {

    this.user = user;

    this.pw = pw;

    this.expected = expected;

    }

    @Test

    public void testAccessCheck() {

    assertEquals(expected, UserAccess.accessCheck(user, pw));

    }

    }

    運(yùn)行測(cè)試,顯示的測(cè)試結(jié)果如圖3所示。

    圖3 測(cè)試結(jié)果

    Fig.3 The test results

    通過(guò)以上代碼可以看出,JUnit4通過(guò)使用一個(gè)標(biāo)記@Parameters注釋的返回類型為Collection的靜態(tài)方法產(chǎn)生數(shù)據(jù),測(cè)試數(shù)據(jù)通過(guò)變量傳遞給測(cè)試方法,從而完成多數(shù)據(jù)輸入的測(cè)試。但是隨著業(yè)務(wù)的需要,測(cè)試人員需要經(jīng)常增加測(cè)試數(shù)據(jù)與修改現(xiàn)有測(cè)試數(shù)據(jù),JUnit4提供的硬編碼方式已經(jīng)愈顯笨重和不便,數(shù)據(jù)與代碼分離顯得尤為重要。

    本文所述的Feed4Junit可以良好 地解決數(shù)據(jù)與代碼分離的問(wèn)題,F(xiàn)eed4JUnit是JUnit測(cè)試框架的擴(kuò)展,它通過(guò)操作來(lái)自于文件以及不同的數(shù)據(jù)源的測(cè)試數(shù)據(jù),使單元測(cè)試變得更容易編寫與維護(hù)。本文通過(guò)實(shí)例展示Feed4JUnit的安裝以及測(cè)試代碼與數(shù)據(jù)分離的實(shí)現(xiàn),本文的實(shí)例代碼全部基于針對(duì)如下一個(gè)簡(jiǎn)單的用戶登錄檢驗(yàn)的類。

    package sample.code;

    public class UserAccess {

    // simple validation for user name and password

    public static boolean accessCheck(String userName, String password) {

    if (userName.length() <= 4 || userName.length() > 8)

    return false;

    if (password.length() <= 4 || password.length() > 8)

    return false;

    if (userName.contains("@"))

    return false;

    if (password.contains("*"))

    return false;

    return true;

    }

    }

    在靜態(tài)方法excel中,本文采用二維數(shù)組的方式來(lái)構(gòu)建測(cè)試所需要的參數(shù)列表,其中每個(gè)數(shù)組中的元素的放置順序并沒(méi)有什么要求,只要和構(gòu)造函數(shù)中的順序保持一致就可以了?,F(xiàn)在如果再增加一種測(cè)試情況,只需要在靜態(tài)方法excel中添加相應(yīng)的數(shù)組即可,不再需要復(fù)制粘貼出一個(gè)新的方法出來(lái)了。

    隨著項(xiàng)目的進(jìn)展,項(xiàng)目的規(guī)模在不斷地膨脹,為了保證項(xiàng)目的質(zhì)量,有計(jì)劃的執(zhí)行全面的單元測(cè)試是非常有必要的。但單靠JUnit提供的測(cè)試套件很難勝任這項(xiàng)工作,因?yàn)轫?xiàng)目中單元測(cè)試類的個(gè)數(shù)在不停的增加,測(cè)試套件卻無(wú)法動(dòng)態(tài)的識(shí)別新加入的單元測(cè)試類,需要手動(dòng)修改測(cè)試套件。

    4 結(jié)論(Conclusion)

    本文主要介紹了Junit相關(guān)單元測(cè)試技術(shù),分析了應(yīng)用Feed4JUnit進(jìn)行單元測(cè)試的方法,用戶可以方便的把測(cè)試數(shù)據(jù)存放在文件或其它數(shù)據(jù)源。通過(guò)提供簡(jiǎn)單的注釋,F(xiàn)eed4JUnit使用戶能夠極其方便的實(shí)施數(shù)據(jù)與代碼分離的測(cè)試,極大地增強(qiáng)了JUnit測(cè)試框架的易用性。本文所敘述的僅僅是Feed4JUnit提供的測(cè)試增強(qiáng)功能的一部分,Junit4同時(shí)還提供了大量數(shù)據(jù)的隨機(jī)測(cè)試和等價(jià)類測(cè)試等眾多功能。

    參考文獻(xiàn)(References)

    [1] 高共革,楊靜.基于.NET的單元測(cè)試自動(dòng)化方法研究[J].微計(jì)算機(jī)信息,2008,24(19):280-281.

    [2] 吳高峽,王芙蓉.單元測(cè)試的自動(dòng)化實(shí)踐[J].計(jì)算機(jī)與數(shù)字工程,2007,35(1):174-176.

    [3] 吳繼娟,孫媛媛,劉桂艷.基于BIST的FPGA邏輯單元測(cè)試方法[J].哈爾濱工業(yè)大學(xué)學(xué)報(bào),2004,36(8):1074-1076.

    [4] 嚴(yán)俊,等.JUTA:一個(gè)Java自動(dòng)化單元測(cè)試工具[J].計(jì)算機(jī)研究與發(fā)展,2010(10):1840-1848.

    [5] 張巍,尹海波,孫立財(cái).軟件的單元測(cè)試方法[J].光電技術(shù)應(yīng)用,2006,21(2):36-38.

    作者簡(jiǎn)介:

    楊 鵬(1978-),女,碩士,講師.研究領(lǐng)域:數(shù)據(jù)挖掘,圖形圖像處理,軟件測(cè)試.

    endprint

    將Java對(duì)象名稱(每個(gè)單詞的頭字母大寫)按照數(shù)據(jù)庫(kù)命名的習(xí)慣進(jìn)行格式化,格式化后的數(shù)據(jù)為小寫字母,并且使用下劃線分割命名單詞,要求對(duì)輸入數(shù)據(jù)進(jìn)行非法驗(yàn)證。

    首先新建一個(gè)TestJUnit。打開(kāi)項(xiàng)目TestJUnit的屬性頁(yè)→選擇“Java Build Path”子選項(xiàng)→點(diǎn)選“Add Library…”按鈕→在彈出的“Add Library”對(duì)話框中選擇JUnit(圖2),并在下一頁(yè)中選擇版本4.1后點(diǎn)擊“Finish”按鈕。

    圖2 JUnit 運(yùn)行測(cè)試界面

    Fig.2 JUnit run the test interface

    在JUnit運(yùn)行界面提示有兩個(gè)測(cè)試情況未通過(guò),當(dāng)首字母大寫時(shí)得到的處理結(jié)果與預(yù)期的有偏差,造成測(cè)試失敗;而當(dāng)測(cè)試對(duì) null的處理結(jié)果時(shí),則直接拋出了異常,測(cè)試錯(cuò)誤。

    JUnit將測(cè)試失敗的情況分為兩種:failure和error。Failure一般由單元測(cè)試使用的斷言方法判斷失敗引起,它表示在測(cè)試點(diǎn)發(fā)現(xiàn)了問(wèn)題;而error則是由代碼異常引起,這是測(cè)試目的之外的發(fā)現(xiàn),它可能產(chǎn)生于測(cè)試代碼本身的錯(cuò)誤(測(cè)試代碼也是代碼,同樣無(wú)法保證完全沒(méi)有缺陷),也可能是被測(cè)試代碼中的一個(gè)隱藏的bug。顯然,被測(cè)試代碼中并沒(méi)有對(duì)首字母大寫和null這兩種特殊情況進(jìn)行處理,現(xiàn)在對(duì)源代碼進(jìn)行修改,添加對(duì)這兩種情況的處理,代碼如下:

    package sample.test;

    import static org.junit.Assert.assertEquals;

    import java.util.Arrays;

    import java.util.Collection;

    import org.junit.Test;

    import org.junit.runner.RunWith;

    import org.junit.runners.Parameterized;

    import org.junit.runners.Parameterized.Parameters;

    import sample.code.UserAccess;

    /*

    * JUnit - Parameter test sample

    */

    @RunWith(Parameterized.class)

    public class JunitSample {

    private String user;

    private String pw;

    private boolean expected;

    @Parameters

    public static Collection dataGenerater() {

    return Arrays.asList(new Object[][] {

    { "user01", "123456", true },

    { "helloworld", "123456", false },

    { "david", "re*ads", false },

    { "goodone", "onegood", true } });

    }

    public JunitSample(String user, String pw, boolean expected) {

    this.user = user;

    this.pw = pw;

    this.expected = expected;

    }

    @Test

    public void testAccessCheck() {

    assertEquals(expected, UserAccess.accessCheck(user, pw));

    }

    }

    運(yùn)行測(cè)試,顯示的測(cè)試結(jié)果如圖3所示。

    圖3 測(cè)試結(jié)果

    Fig.3 The test results

    通過(guò)以上代碼可以看出,JUnit4通過(guò)使用一個(gè)標(biāo)記@Parameters注釋的返回類型為Collection的靜態(tài)方法產(chǎn)生數(shù)據(jù),測(cè)試數(shù)據(jù)通過(guò)變量傳遞給測(cè)試方法,從而完成多數(shù)據(jù)輸入的測(cè)試。但是隨著業(yè)務(wù)的需要,測(cè)試人員需要經(jīng)常增加測(cè)試數(shù)據(jù)與修改現(xiàn)有測(cè)試數(shù)據(jù),JUnit4提供的硬編碼方式已經(jīng)愈顯笨重和不便,數(shù)據(jù)與代碼分離顯得尤為重要。

    本文所述的Feed4Junit可以良好 地解決數(shù)據(jù)與代碼分離的問(wèn)題,F(xiàn)eed4JUnit是JUnit測(cè)試框架的擴(kuò)展,它通過(guò)操作來(lái)自于文件以及不同的數(shù)據(jù)源的測(cè)試數(shù)據(jù),使單元測(cè)試變得更容易編寫與維護(hù)。本文通過(guò)實(shí)例展示Feed4JUnit的安裝以及測(cè)試代碼與數(shù)據(jù)分離的實(shí)現(xiàn),本文的實(shí)例代碼全部基于針對(duì)如下一個(gè)簡(jiǎn)單的用戶登錄檢驗(yàn)的類。

    package sample.code;

    public class UserAccess {

    // simple validation for user name and password

    public static boolean accessCheck(String userName, String password) {

    if (userName.length() <= 4 || userName.length() > 8)

    return false;

    if (password.length() <= 4 || password.length() > 8)

    return false;

    if (userName.contains("@"))

    return false;

    if (password.contains("*"))

    return false;

    return true;

    }

    }

    在靜態(tài)方法excel中,本文采用二維數(shù)組的方式來(lái)構(gòu)建測(cè)試所需要的參數(shù)列表,其中每個(gè)數(shù)組中的元素的放置順序并沒(méi)有什么要求,只要和構(gòu)造函數(shù)中的順序保持一致就可以了?,F(xiàn)在如果再增加一種測(cè)試情況,只需要在靜態(tài)方法excel中添加相應(yīng)的數(shù)組即可,不再需要復(fù)制粘貼出一個(gè)新的方法出來(lái)了。

    隨著項(xiàng)目的進(jìn)展,項(xiàng)目的規(guī)模在不斷地膨脹,為了保證項(xiàng)目的質(zhì)量,有計(jì)劃的執(zhí)行全面的單元測(cè)試是非常有必要的。但單靠JUnit提供的測(cè)試套件很難勝任這項(xiàng)工作,因?yàn)轫?xiàng)目中單元測(cè)試類的個(gè)數(shù)在不停的增加,測(cè)試套件卻無(wú)法動(dòng)態(tài)的識(shí)別新加入的單元測(cè)試類,需要手動(dòng)修改測(cè)試套件。

    4 結(jié)論(Conclusion)

    本文主要介紹了Junit相關(guān)單元測(cè)試技術(shù),分析了應(yīng)用Feed4JUnit進(jìn)行單元測(cè)試的方法,用戶可以方便的把測(cè)試數(shù)據(jù)存放在文件或其它數(shù)據(jù)源。通過(guò)提供簡(jiǎn)單的注釋,F(xiàn)eed4JUnit使用戶能夠極其方便的實(shí)施數(shù)據(jù)與代碼分離的測(cè)試,極大地增強(qiáng)了JUnit測(cè)試框架的易用性。本文所敘述的僅僅是Feed4JUnit提供的測(cè)試增強(qiáng)功能的一部分,Junit4同時(shí)還提供了大量數(shù)據(jù)的隨機(jī)測(cè)試和等價(jià)類測(cè)試等眾多功能。

    參考文獻(xiàn)(References)

    [1] 高共革,楊靜.基于.NET的單元測(cè)試自動(dòng)化方法研究[J].微計(jì)算機(jī)信息,2008,24(19):280-281.

    [2] 吳高峽,王芙蓉.單元測(cè)試的自動(dòng)化實(shí)踐[J].計(jì)算機(jī)與數(shù)字工程,2007,35(1):174-176.

    [3] 吳繼娟,孫媛媛,劉桂艷.基于BIST的FPGA邏輯單元測(cè)試方法[J].哈爾濱工業(yè)大學(xué)學(xué)報(bào),2004,36(8):1074-1076.

    [4] 嚴(yán)俊,等.JUTA:一個(gè)Java自動(dòng)化單元測(cè)試工具[J].計(jì)算機(jī)研究與發(fā)展,2010(10):1840-1848.

    [5] 張巍,尹海波,孫立財(cái).軟件的單元測(cè)試方法[J].光電技術(shù)應(yīng)用,2006,21(2):36-38.

    作者簡(jiǎn)介:

    楊 鵬(1978-),女,碩士,講師.研究領(lǐng)域:數(shù)據(jù)挖掘,圖形圖像處理,軟件測(cè)試.

    endprint

    將Java對(duì)象名稱(每個(gè)單詞的頭字母大寫)按照數(shù)據(jù)庫(kù)命名的習(xí)慣進(jìn)行格式化,格式化后的數(shù)據(jù)為小寫字母,并且使用下劃線分割命名單詞,要求對(duì)輸入數(shù)據(jù)進(jìn)行非法驗(yàn)證。

    首先新建一個(gè)TestJUnit。打開(kāi)項(xiàng)目TestJUnit的屬性頁(yè)→選擇“Java Build Path”子選項(xiàng)→點(diǎn)選“Add Library…”按鈕→在彈出的“Add Library”對(duì)話框中選擇JUnit(圖2),并在下一頁(yè)中選擇版本4.1后點(diǎn)擊“Finish”按鈕。

    圖2 JUnit 運(yùn)行測(cè)試界面

    Fig.2 JUnit run the test interface

    在JUnit運(yùn)行界面提示有兩個(gè)測(cè)試情況未通過(guò),當(dāng)首字母大寫時(shí)得到的處理結(jié)果與預(yù)期的有偏差,造成測(cè)試失?。欢?dāng)測(cè)試對(duì) null的處理結(jié)果時(shí),則直接拋出了異常,測(cè)試錯(cuò)誤。

    JUnit將測(cè)試失敗的情況分為兩種:failure和error。Failure一般由單元測(cè)試使用的斷言方法判斷失敗引起,它表示在測(cè)試點(diǎn)發(fā)現(xiàn)了問(wèn)題;而error則是由代碼異常引起,這是測(cè)試目的之外的發(fā)現(xiàn),它可能產(chǎn)生于測(cè)試代碼本身的錯(cuò)誤(測(cè)試代碼也是代碼,同樣無(wú)法保證完全沒(méi)有缺陷),也可能是被測(cè)試代碼中的一個(gè)隱藏的bug。顯然,被測(cè)試代碼中并沒(méi)有對(duì)首字母大寫和null這兩種特殊情況進(jìn)行處理,現(xiàn)在對(duì)源代碼進(jìn)行修改,添加對(duì)這兩種情況的處理,代碼如下:

    package sample.test;

    import static org.junit.Assert.assertEquals;

    import java.util.Arrays;

    import java.util.Collection;

    import org.junit.Test;

    import org.junit.runner.RunWith;

    import org.junit.runners.Parameterized;

    import org.junit.runners.Parameterized.Parameters;

    import sample.code.UserAccess;

    /*

    * JUnit - Parameter test sample

    */

    @RunWith(Parameterized.class)

    public class JunitSample {

    private String user;

    private String pw;

    private boolean expected;

    @Parameters

    public static Collection dataGenerater() {

    return Arrays.asList(new Object[][] {

    { "user01", "123456", true },

    { "helloworld", "123456", false },

    { "david", "re*ads", false },

    { "goodone", "onegood", true } });

    }

    public JunitSample(String user, String pw, boolean expected) {

    this.user = user;

    this.pw = pw;

    this.expected = expected;

    }

    @Test

    public void testAccessCheck() {

    assertEquals(expected, UserAccess.accessCheck(user, pw));

    }

    }

    運(yùn)行測(cè)試,顯示的測(cè)試結(jié)果如圖3所示。

    圖3 測(cè)試結(jié)果

    Fig.3 The test results

    通過(guò)以上代碼可以看出,JUnit4通過(guò)使用一個(gè)標(biāo)記@Parameters注釋的返回類型為Collection的靜態(tài)方法產(chǎn)生數(shù)據(jù),測(cè)試數(shù)據(jù)通過(guò)變量傳遞給測(cè)試方法,從而完成多數(shù)據(jù)輸入的測(cè)試。但是隨著業(yè)務(wù)的需要,測(cè)試人員需要經(jīng)常增加測(cè)試數(shù)據(jù)與修改現(xiàn)有測(cè)試數(shù)據(jù),JUnit4提供的硬編碼方式已經(jīng)愈顯笨重和不便,數(shù)據(jù)與代碼分離顯得尤為重要。

    本文所述的Feed4Junit可以良好 地解決數(shù)據(jù)與代碼分離的問(wèn)題,F(xiàn)eed4JUnit是JUnit測(cè)試框架的擴(kuò)展,它通過(guò)操作來(lái)自于文件以及不同的數(shù)據(jù)源的測(cè)試數(shù)據(jù),使單元測(cè)試變得更容易編寫與維護(hù)。本文通過(guò)實(shí)例展示Feed4JUnit的安裝以及測(cè)試代碼與數(shù)據(jù)分離的實(shí)現(xiàn),本文的實(shí)例代碼全部基于針對(duì)如下一個(gè)簡(jiǎn)單的用戶登錄檢驗(yàn)的類。

    package sample.code;

    public class UserAccess {

    // simple validation for user name and password

    public static boolean accessCheck(String userName, String password) {

    if (userName.length() <= 4 || userName.length() > 8)

    return false;

    if (password.length() <= 4 || password.length() > 8)

    return false;

    if (userName.contains("@"))

    return false;

    if (password.contains("*"))

    return false;

    return true;

    }

    }

    在靜態(tài)方法excel中,本文采用二維數(shù)組的方式來(lái)構(gòu)建測(cè)試所需要的參數(shù)列表,其中每個(gè)數(shù)組中的元素的放置順序并沒(méi)有什么要求,只要和構(gòu)造函數(shù)中的順序保持一致就可以了。現(xiàn)在如果再增加一種測(cè)試情況,只需要在靜態(tài)方法excel中添加相應(yīng)的數(shù)組即可,不再需要復(fù)制粘貼出一個(gè)新的方法出來(lái)了。

    隨著項(xiàng)目的進(jìn)展,項(xiàng)目的規(guī)模在不斷地膨脹,為了保證項(xiàng)目的質(zhì)量,有計(jì)劃的執(zhí)行全面的單元測(cè)試是非常有必要的。但單靠JUnit提供的測(cè)試套件很難勝任這項(xiàng)工作,因?yàn)轫?xiàng)目中單元測(cè)試類的個(gè)數(shù)在不停的增加,測(cè)試套件卻無(wú)法動(dòng)態(tài)的識(shí)別新加入的單元測(cè)試類,需要手動(dòng)修改測(cè)試套件。

    4 結(jié)論(Conclusion)

    本文主要介紹了Junit相關(guān)單元測(cè)試技術(shù),分析了應(yīng)用Feed4JUnit進(jìn)行單元測(cè)試的方法,用戶可以方便的把測(cè)試數(shù)據(jù)存放在文件或其它數(shù)據(jù)源。通過(guò)提供簡(jiǎn)單的注釋,F(xiàn)eed4JUnit使用戶能夠極其方便的實(shí)施數(shù)據(jù)與代碼分離的測(cè)試,極大地增強(qiáng)了JUnit測(cè)試框架的易用性。本文所敘述的僅僅是Feed4JUnit提供的測(cè)試增強(qiáng)功能的一部分,Junit4同時(shí)還提供了大量數(shù)據(jù)的隨機(jī)測(cè)試和等價(jià)類測(cè)試等眾多功能。

    參考文獻(xiàn)(References)

    [1] 高共革,楊靜.基于.NET的單元測(cè)試自動(dòng)化方法研究[J].微計(jì)算機(jī)信息,2008,24(19):280-281.

    [2] 吳高峽,王芙蓉.單元測(cè)試的自動(dòng)化實(shí)踐[J].計(jì)算機(jī)與數(shù)字工程,2007,35(1):174-176.

    [3] 吳繼娟,孫媛媛,劉桂艷.基于BIST的FPGA邏輯單元測(cè)試方法[J].哈爾濱工業(yè)大學(xué)學(xué)報(bào),2004,36(8):1074-1076.

    [4] 嚴(yán)俊,等.JUTA:一個(gè)Java自動(dòng)化單元測(cè)試工具[J].計(jì)算機(jī)研究與發(fā)展,2010(10):1840-1848.

    [5] 張巍,尹海波,孫立財(cái).軟件的單元測(cè)試方法[J].光電技術(shù)應(yīng)用,2006,21(2):36-38.

    作者簡(jiǎn)介:

    楊 鵬(1978-),女,碩士,講師.研究領(lǐng)域:數(shù)據(jù)挖掘,圖形圖像處理,軟件測(cè)試.

    endprint

    猜你喜歡
    單元測(cè)試測(cè)試數(shù)據(jù)套件
    基于維修費(fèi)用的關(guān)鍵部套件分析
    “龍吟套件”創(chuàng)作感悟
    山東陶瓷(2020年5期)2020-03-19 01:35:36
    測(cè)試數(shù)據(jù)管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
    基于自適應(yīng)粒子群優(yōu)化算法的測(cè)試數(shù)據(jù)擴(kuò)增方法
    工業(yè)照明超頻三天棚燈套件改造工程
    空間co-location挖掘模式在學(xué)生體能測(cè)試數(shù)據(jù)中的應(yīng)用
    體育科技(2016年2期)2016-02-28 17:06:21
    一年級(jí)上冊(cè)第五單元測(cè)試
    一年級(jí)上冊(cè)一、二單元測(cè)試
    CSRmesh開(kāi)發(fā)套件加速物聯(lián)網(wǎng)產(chǎn)品開(kāi)發(fā)
    第五單元測(cè)試卷
    麻豆一二三区av精品| 国产真人三级小视频在线观看| 正在播放国产对白刺激| 91麻豆av在线| 精品久久久久久电影网| 国产97色在线日韩免费| 在线av久久热| 99精品久久久久人妻精品| 91国产中文字幕| 一级作爱视频免费观看| 国产精品美女特级片免费视频播放器 | 亚洲色图av天堂| 乱人伦中国视频| 国产一区二区三区综合在线观看| 久久久国产成人免费| √禁漫天堂资源中文www| 高清欧美精品videossex| 自线自在国产av| 国产欧美日韩精品亚洲av| 超色免费av| 日本三级黄在线观看| 99国产精品一区二区三区| 久久久国产欧美日韩av| 日本a在线网址| 免费在线观看亚洲国产| 久久久久久久久中文| 侵犯人妻中文字幕一二三四区| 12—13女人毛片做爰片一| 亚洲精品在线观看二区| 男女下面进入的视频免费午夜 | 99在线人妻在线中文字幕| 在线观看免费视频网站a站| 精品一品国产午夜福利视频| 亚洲第一青青草原| 日韩欧美一区视频在线观看| 1024香蕉在线观看| 国产欧美日韩精品亚洲av| 叶爱在线成人免费视频播放| 一个人免费在线观看的高清视频| 国产欧美日韩一区二区三区在线| 一级a爱片免费观看的视频| 欧美亚洲日本最大视频资源| 久久亚洲精品不卡| 国产亚洲欧美在线一区二区| 国产伦人伦偷精品视频| 十八禁人妻一区二区| 精品久久久久久电影网| 久久久精品欧美日韩精品| 色哟哟哟哟哟哟| 欧美av亚洲av综合av国产av| 日韩欧美一区二区三区在线观看| 国产精品一区二区三区四区久久 | 在线av久久热| 国产片内射在线| 中文字幕最新亚洲高清| 50天的宝宝边吃奶边哭怎么回事| 一本综合久久免费| 91精品国产国语对白视频| 久久国产精品人妻蜜桃| 自线自在国产av| 国产精品乱码一区二三区的特点 | 久久久久久久久免费视频了| 人妻久久中文字幕网| 成人18禁在线播放| 国产99久久九九免费精品| 又黄又粗又硬又大视频| 国产精品野战在线观看 | 日韩视频一区二区在线观看| 欧美在线一区亚洲| 久久性视频一级片| 两人在一起打扑克的视频| 精品久久久久久成人av| 又紧又爽又黄一区二区| 亚洲成人国产一区在线观看| a在线观看视频网站| 免费在线观看亚洲国产| 色尼玛亚洲综合影院| 夜夜躁狠狠躁天天躁| 国产亚洲精品综合一区在线观看 | 亚洲欧美日韩另类电影网站| 又紧又爽又黄一区二区| 一二三四在线观看免费中文在| 亚洲精品国产区一区二| 12—13女人毛片做爰片一| 91成人精品电影| 日韩欧美一区二区三区在线观看| 琪琪午夜伦伦电影理论片6080| 午夜亚洲福利在线播放| 久久性视频一级片| 欧美中文日本在线观看视频| 精品第一国产精品| 侵犯人妻中文字幕一二三四区| 国产精品国产av在线观看| 午夜免费激情av| 黄色a级毛片大全视频| 亚洲精品国产区一区二| 欧美在线黄色| 成人三级黄色视频| 99精品在免费线老司机午夜| 久久久久久久久免费视频了| 久久午夜综合久久蜜桃| 十八禁人妻一区二区| 麻豆成人av在线观看| 97人妻天天添夜夜摸| 黑人巨大精品欧美一区二区蜜桃| 男女做爰动态图高潮gif福利片 | 亚洲欧美一区二区三区黑人| 在线天堂中文资源库| 欧美在线黄色| 国产三级黄色录像| 国产黄色免费在线视频| 欧美另类亚洲清纯唯美| 国产亚洲精品综合一区在线观看 | 国产精品亚洲一级av第二区| 国产精品影院久久| 欧美在线黄色| 久久精品人人爽人人爽视色| 精品福利永久在线观看| 欧美乱妇无乱码| 久久草成人影院| 18禁黄网站禁片午夜丰满| 久久久久九九精品影院| 操出白浆在线播放| 欧美丝袜亚洲另类 | 久久欧美精品欧美久久欧美| 香蕉久久夜色| 丰满饥渴人妻一区二区三| 精品国产亚洲在线| 国产av在哪里看| 精品国产一区二区三区四区第35| 日韩精品免费视频一区二区三区| 老汉色av国产亚洲站长工具| 国产一区二区激情短视频| 日韩av在线大香蕉| 国产av又大| 精品欧美一区二区三区在线| 亚洲在线自拍视频| 老司机深夜福利视频在线观看| 夜夜夜夜夜久久久久| 国产成人av激情在线播放| 男人舔女人的私密视频| 天天添夜夜摸| 久久人妻av系列| 老熟妇仑乱视频hdxx| 99国产综合亚洲精品| 自拍欧美九色日韩亚洲蝌蚪91| 亚洲精品一卡2卡三卡4卡5卡| 在线观看一区二区三区| 亚洲国产精品sss在线观看 | 久久久久久久久免费视频了| 国产在线精品亚洲第一网站| 欧美日韩国产mv在线观看视频| 亚洲欧美激情在线| 国产三级在线视频| 欧美黑人欧美精品刺激| 亚洲av熟女| 国产麻豆69| 亚洲欧洲精品一区二区精品久久久| 欧美乱码精品一区二区三区| 少妇 在线观看| 国产成人欧美| 国产主播在线观看一区二区| 一边摸一边抽搐一进一小说| 精品久久久精品久久久| 岛国视频午夜一区免费看| 免费在线观看黄色视频的| 亚洲专区字幕在线| 亚洲久久久国产精品| 精品国产一区二区久久| 免费日韩欧美在线观看| 长腿黑丝高跟| www.精华液| 999久久久精品免费观看国产| av有码第一页| 国产一区二区在线av高清观看| 两个人看的免费小视频| 亚洲色图综合在线观看| 久久 成人 亚洲| 国产熟女xx| 久久香蕉精品热| 日本免费一区二区三区高清不卡 | 精品久久久久久,| 久久久久久久午夜电影 | 又紧又爽又黄一区二区| 国产成人系列免费观看| 久久久水蜜桃国产精品网| 国产黄色免费在线视频| 免费久久久久久久精品成人欧美视频| 国产伦一二天堂av在线观看| 日韩免费av在线播放| 精品乱码久久久久久99久播| 电影成人av| 黑人猛操日本美女一级片| 欧美 亚洲 国产 日韩一| 国产一区在线观看成人免费| 中文字幕人妻熟女乱码| 国产精品98久久久久久宅男小说| 国产一区二区三区在线臀色熟女 | 久久精品影院6| 性欧美人与动物交配| 国产视频一区二区在线看| 午夜福利免费观看在线| 亚洲欧洲精品一区二区精品久久久| 成人国产一区最新在线观看| www.www免费av| 中文字幕高清在线视频| 欧美黄色片欧美黄色片| 欧美中文综合在线视频| 久久久国产欧美日韩av| 国产精品美女特级片免费视频播放器 | 国产精品久久久久成人av| 精品国产美女av久久久久小说| 一进一出抽搐动态| 国产亚洲精品久久久久久毛片| 亚洲性夜色夜夜综合| 搡老乐熟女国产| 999久久久国产精品视频| 久久亚洲真实| 两性午夜刺激爽爽歪歪视频在线观看 | 国产亚洲欧美98| 侵犯人妻中文字幕一二三四区| 一个人免费在线观看的高清视频| 国产高清videossex| 韩国精品一区二区三区| 在线观看免费日韩欧美大片| 97人妻天天添夜夜摸| 久久精品人人爽人人爽视色| 级片在线观看| 亚洲欧美日韩无卡精品| 国产麻豆69| 国产亚洲精品久久久久久毛片| 99国产综合亚洲精品| xxx96com| 国产免费av片在线观看野外av| 国产国语露脸激情在线看| 国产乱人伦免费视频| 视频区欧美日本亚洲| √禁漫天堂资源中文www| 日韩欧美国产一区二区入口| 午夜精品久久久久久毛片777| 757午夜福利合集在线观看| 亚洲男人天堂网一区| 亚洲成国产人片在线观看| 亚洲专区字幕在线| 美女高潮喷水抽搐中文字幕| 精品熟女少妇八av免费久了| 亚洲一区高清亚洲精品| 国产一区二区三区在线臀色熟女 | 久久国产精品人妻蜜桃| 精品国产国语对白av| 精品电影一区二区在线| 久久久水蜜桃国产精品网| 99在线视频只有这里精品首页| 欧美最黄视频在线播放免费 | 久热这里只有精品99| 亚洲性夜色夜夜综合| 精品一区二区三区四区五区乱码| 欧美最黄视频在线播放免费 | 久久人妻福利社区极品人妻图片| 最新在线观看一区二区三区| 日韩免费高清中文字幕av| 最好的美女福利视频网| 亚洲一区高清亚洲精品| 天堂影院成人在线观看| 大型黄色视频在线免费观看| 久久九九热精品免费| 久久精品亚洲熟妇少妇任你| 日韩欧美免费精品| 中文字幕高清在线视频| 亚洲精品国产精品久久久不卡| 黄色丝袜av网址大全| 最好的美女福利视频网| 老司机午夜十八禁免费视频| 一边摸一边做爽爽视频免费| 在线天堂中文资源库| 久久久精品欧美日韩精品| 欧美激情 高清一区二区三区| 欧美成人性av电影在线观看| 女人被狂操c到高潮| 在线观看免费高清a一片| 久久国产精品影院| 在线免费观看的www视频| 免费看十八禁软件| 亚洲情色 制服丝袜| 水蜜桃什么品种好| 一区福利在线观看| 中文字幕人妻丝袜制服| 久久精品国产99精品国产亚洲性色 | 国产精品爽爽va在线观看网站 | 亚洲伊人色综图| 国产精品免费视频内射| 黄色女人牲交| 桃色一区二区三区在线观看| 色老头精品视频在线观看| 欧美老熟妇乱子伦牲交| 欧美色视频一区免费| 亚洲中文日韩欧美视频| 亚洲欧美日韩无卡精品| 高清毛片免费观看视频网站 | 一本综合久久免费| 丰满的人妻完整版| 国产熟女午夜一区二区三区| 色综合婷婷激情| www.自偷自拍.com| 满18在线观看网站| 亚洲自偷自拍图片 自拍| 国产免费现黄频在线看| 99国产精品99久久久久| 亚洲中文av在线| 9色porny在线观看| 国产免费av片在线观看野外av| 色综合欧美亚洲国产小说| 国产亚洲精品第一综合不卡| 欧美黄色淫秽网站| 亚洲少妇的诱惑av| 久久久久久亚洲精品国产蜜桃av| 婷婷精品国产亚洲av在线| 一级作爱视频免费观看| 999久久久精品免费观看国产| 免费看十八禁软件| 久久香蕉精品热| 中亚洲国语对白在线视频| 免费在线观看视频国产中文字幕亚洲| 国产精品av久久久久免费| 国产成人精品久久二区二区免费| 99国产精品免费福利视频| 最新美女视频免费是黄的| 国产av一区二区精品久久| 精品久久久久久成人av| 两个人免费观看高清视频| 亚洲第一欧美日韩一区二区三区| 波多野结衣av一区二区av| aaaaa片日本免费| 91字幕亚洲| 香蕉国产在线看| 夜夜看夜夜爽夜夜摸 | 国产亚洲精品一区二区www| 国产精品九九99| 亚洲在线自拍视频| 欧美日本中文国产一区发布| 可以在线观看毛片的网站| 亚洲熟妇中文字幕五十中出 | 亚洲性夜色夜夜综合| 一级毛片高清免费大全| 露出奶头的视频| 亚洲中文日韩欧美视频| 嫩草影院精品99| 午夜日韩欧美国产| 露出奶头的视频| 一区二区三区国产精品乱码| 亚洲性夜色夜夜综合| 精品卡一卡二卡四卡免费| 90打野战视频偷拍视频| 女人爽到高潮嗷嗷叫在线视频| 久久久久久大精品| 精品卡一卡二卡四卡免费| 视频区欧美日本亚洲| 一级毛片高清免费大全| 成在线人永久免费视频| 免费在线观看视频国产中文字幕亚洲| 高清黄色对白视频在线免费看| 欧美国产精品va在线观看不卡| 91av网站免费观看| 亚洲一区中文字幕在线| 一个人观看的视频www高清免费观看 | 久久 成人 亚洲| 亚洲精品粉嫩美女一区| 麻豆一二三区av精品| 女性生殖器流出的白浆| 搡老熟女国产l中国老女人| av在线天堂中文字幕 | 在线天堂中文资源库| 精品国内亚洲2022精品成人| 久久精品人人爽人人爽视色| 香蕉久久夜色| 亚洲av熟女| 9热在线视频观看99| 老鸭窝网址在线观看| 国产精品一区二区精品视频观看| 十八禁人妻一区二区| 夜夜看夜夜爽夜夜摸 | 国产精品免费视频内射| 大香蕉久久成人网| 亚洲精品在线美女| 免费在线观看黄色视频的| 好男人电影高清在线观看| 超色免费av| 老司机深夜福利视频在线观看| 亚洲精品国产精品久久久不卡| 免费观看精品视频网站| 91麻豆精品激情在线观看国产 | 国产蜜桃级精品一区二区三区| 久久久久国产一级毛片高清牌| 一级a爱视频在线免费观看| 搡老熟女国产l中国老女人| 热re99久久精品国产66热6| 亚洲人成77777在线视频| 国产精品 欧美亚洲| 亚洲欧美激情在线| 交换朋友夫妻互换小说| 侵犯人妻中文字幕一二三四区| 日韩大码丰满熟妇| 免费在线观看影片大全网站| 亚洲人成伊人成综合网2020| 国产又爽黄色视频| 亚洲欧洲精品一区二区精品久久久| 欧美激情 高清一区二区三区| 亚洲欧美日韩高清在线视频| 午夜福利免费观看在线| 99国产精品一区二区三区| 日韩av在线大香蕉| 亚洲欧美激情在线| av福利片在线| av中文乱码字幕在线| 欧美中文日本在线观看视频| 久热这里只有精品99| 最新美女视频免费是黄的| 亚洲精品美女久久久久99蜜臀| 黄色毛片三级朝国网站| 丰满的人妻完整版| 久久精品亚洲av国产电影网| 午夜免费激情av| 天堂俺去俺来也www色官网| www.999成人在线观看| 成年女人毛片免费观看观看9| 亚洲国产精品sss在线观看 | 色老头精品视频在线观看| 1024视频免费在线观看| 黄色 视频免费看| 在线观看免费午夜福利视频| 神马国产精品三级电影在线观看 | 精品人妻在线不人妻| www国产在线视频色| 人妻丰满熟妇av一区二区三区| 免费在线观看影片大全网站| 欧美激情极品国产一区二区三区| 亚洲色图综合在线观看| 国产有黄有色有爽视频| 亚洲av五月六月丁香网| 久久九九热精品免费| 欧美一区二区精品小视频在线| 很黄的视频免费| 亚洲成人精品中文字幕电影 | 亚洲五月色婷婷综合| 在线观看免费日韩欧美大片| 成人特级黄色片久久久久久久| 青草久久国产| 99久久久亚洲精品蜜臀av| 中文字幕人妻熟女乱码| 国产精品影院久久| 成人国语在线视频| 久久久国产欧美日韩av| 高清av免费在线| 精品人妻在线不人妻| 级片在线观看| 十八禁网站免费在线| 久久人人爽av亚洲精品天堂| 19禁男女啪啪无遮挡网站| 可以在线观看毛片的网站| 日本黄色日本黄色录像| 丁香六月欧美| 亚洲激情在线av| 99在线视频只有这里精品首页| 日本vs欧美在线观看视频| 黄色成人免费大全| 琪琪午夜伦伦电影理论片6080| 高清av免费在线| 国产欧美日韩一区二区三区在线| 国产精品久久视频播放| 91九色精品人成在线观看| 免费高清视频大片| 黑人猛操日本美女一级片| 婷婷精品国产亚洲av在线| 在线观看午夜福利视频| 可以在线观看毛片的网站| 两个人免费观看高清视频| 女人精品久久久久毛片| 欧美日韩黄片免| 免费搜索国产男女视频| 好看av亚洲va欧美ⅴa在| 国产一区二区在线av高清观看| 国产高清国产精品国产三级| 美女大奶头视频| 美女 人体艺术 gogo| 亚洲一区二区三区色噜噜 | 大型av网站在线播放| 国产精品电影一区二区三区| 日韩欧美三级三区| 中文字幕最新亚洲高清| 亚洲视频免费观看视频| 熟女少妇亚洲综合色aaa.| 搡老岳熟女国产| 国产免费av片在线观看野外av| 少妇的丰满在线观看| 国产亚洲精品第一综合不卡| 国产av又大| 精品国产超薄肉色丝袜足j| 久久久久国内视频| 国产亚洲精品久久久久久毛片| 日韩高清综合在线| 亚洲熟女毛片儿| 国产成人影院久久av| 亚洲五月色婷婷综合| 老鸭窝网址在线观看| a级毛片在线看网站| 啦啦啦 在线观看视频| 可以在线观看毛片的网站| 99精品欧美一区二区三区四区| 精品第一国产精品| 亚洲,欧美精品.| 黄色丝袜av网址大全| 国产免费av片在线观看野外av| 国内久久婷婷六月综合欲色啪| 精品人妻在线不人妻| 国内久久婷婷六月综合欲色啪| 少妇被粗大的猛进出69影院| 亚洲精品国产色婷婷电影| 两个人免费观看高清视频| 中文字幕最新亚洲高清| 天天添夜夜摸| 中文亚洲av片在线观看爽| 午夜老司机福利片| 日韩欧美一区二区三区在线观看| 精品卡一卡二卡四卡免费| 麻豆av在线久日| 天天躁夜夜躁狠狠躁躁| 校园春色视频在线观看| 国产一区二区激情短视频| 手机成人av网站| 一区在线观看完整版| 国产又爽黄色视频| av国产精品久久久久影院| 一夜夜www| 亚洲一区二区三区色噜噜 | 曰老女人黄片| 免费在线观看黄色视频的| 一区福利在线观看| 99国产精品99久久久久| 久久天躁狠狠躁夜夜2o2o| 999久久久国产精品视频| 国产成人啪精品午夜网站| 亚洲精品美女久久av网站| 免费日韩欧美在线观看| 99香蕉大伊视频| 亚洲片人在线观看| 日韩大尺度精品在线看网址 | 久久伊人香网站| 欧美日韩中文字幕国产精品一区二区三区 | 精品一区二区三区av网在线观看| 男女之事视频高清在线观看| 亚洲成人久久性| 精品欧美一区二区三区在线| 99国产精品免费福利视频| www日本在线高清视频| 99香蕉大伊视频| 国产高清激情床上av| 亚洲av片天天在线观看| 免费看十八禁软件| 国产亚洲精品第一综合不卡| 50天的宝宝边吃奶边哭怎么回事| 极品教师在线免费播放| 国产99白浆流出| 国产单亲对白刺激| 亚洲精品美女久久av网站| 国产乱人伦免费视频| 亚洲人成伊人成综合网2020| 在线免费观看的www视频| 超碰成人久久| 操出白浆在线播放| 国产精品久久久人人做人人爽| 咕卡用的链子| tocl精华| 男女下面进入的视频免费午夜 | 久久久久久亚洲精品国产蜜桃av| 国产精品二区激情视频| 亚洲午夜精品一区,二区,三区| 欧美日韩一级在线毛片| 黄色女人牲交| 国产成+人综合+亚洲专区| 久久久国产成人免费| 男人舔女人下体高潮全视频| 午夜日韩欧美国产| 久久精品亚洲av国产电影网| 日韩 欧美 亚洲 中文字幕| 美女福利国产在线| 男人的好看免费观看在线视频 | 久久人妻av系列| 在线天堂中文资源库| 精品福利永久在线观看| 久久久国产一区二区| 精品人妻在线不人妻| 黄片播放在线免费| 视频区欧美日本亚洲| 色婷婷久久久亚洲欧美| 日韩大码丰满熟妇| 国产欧美日韩一区二区三区在线| 最新在线观看一区二区三区| 日韩欧美一区视频在线观看| 成人18禁高潮啪啪吃奶动态图| 长腿黑丝高跟| 亚洲一区二区三区不卡视频| 久久99一区二区三区| 亚洲成人免费电影在线观看| 久久久国产成人免费| 99国产极品粉嫩在线观看| 高清毛片免费观看视频网站 | 亚洲在线自拍视频| 日韩三级视频一区二区三区| 中文字幕高清在线视频| 亚洲av第一区精品v没综合| 国产亚洲av高清不卡| 国产国语露脸激情在线看| 日本欧美视频一区| 欧美中文综合在线视频| 日本黄色日本黄色录像|