AndroidStudio測(cè)試(四)單元測(cè)試Mock以及Mockito的使用

網(wǎng)絡(luò)測(cè)試

這篇文章我們模擬一個(gè)場(chǎng)景:我們?cè)趯W(xué)校教務(wù)軟件中要獲取學(xué)生的信息,獲取方式有兩種第一種是通過(guò)本地?cái)?shù)據(jù)庫(kù)獲取,第二種是通過(guò)網(wǎng)絡(luò)獲取。
為此我們新建一個(gè)Student類來(lái)描述學(xué)生信息如下:

public class Student {
    public int id ;
    public String name;
    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}

接下來(lái)我們建一個(gè)接口用來(lái)獲取學(xué)生的信息。

public interface StudentDao {
    Student getStudentFromDB(int sid);
}

但是此時(shí)我們不去實(shí)現(xiàn)這個(gè)接口,因?yàn)楣ぷ鲿r(shí)很多情況都是分工合作,你做的功能需要?jiǎng)e人的配合,往往會(huì)影響開(kāi)發(fā)效率,那么我們?cè)撛趺慈y(cè)試自己的代碼呢,下面我們建立一個(gè)StuController類來(lái)控制是從何處獲取學(xué)生信息。

public class StuController {

    private StudentDao studentDao;

    public Student getStudentInfo(int sid){
        Student student = null;
        if(studentDao != null){
            student = studentDao.getStudentFromDB(sid);
        }
        if(student == null){
            student = fetchStudent(sid);
        }
        return student;
    }

    private Student fetchStudent(int sid) {
        System.out.print("模擬網(wǎng)絡(luò)獲取學(xué)生信息");
        Student student = new Student();
        student.id = 12;
        student.name = "網(wǎng)絡(luò)名";
        return student;
    }

    public void setStudentDao(StudentDao studentDao) {
        this.studentDao = studentDao;
    }
}

以上代碼相信大家都能看懂,下面我們建立一個(gè)Student測(cè)試類

public class StuControllerTest {
    StuController stuController;
    StudentDao studentDao;
    @Before
    public void setUp() throws Exception {
        stuController = new StuController();
        studentDao = mock(StudentDao.class);
        stuController.setStudentDao(studentDao);
    }

    @After
    public void tearDown() throws Exception {

    }

    @Test
    public void getStudentInfo() throws Exception {
        Student returnStudent = new Student();
        returnStudent.id = 123;
        returnStudent.name = "Mock-user";

        when(studentDao.getStudentFromDB(anyInt())).thenReturn(returnStudent);

        Student student = stuController.getStudentInfo(123);
        TestCase.assertEquals(123,student.id);
        TestCase.assertEquals("Mock-user",student.name);

        System.out.print(studentDao.getStudentFromDB(1));

    }

    @Test
    public void testGetStudentInfoFromSever(){
        when(studentDao.getStudentFromDB(anyInt())).thenReturn(null);
        Student student = stuController.getStudentInfo(456);
        TestCase.assertEquals(12,student.id);
        TestCase.assertEquals("網(wǎng)絡(luò)名",student.name);

    }

}

從上面代碼可以看到,我們并沒(méi)有實(shí)現(xiàn)StudentDao,我們只是應(yīng)用Mock 創(chuàng)建了一個(gè)studentDao的實(shí)例。
上面這個(gè)方法是測(cè)試數(shù)據(jù)庫(kù)獲取數(shù)據(jù)是否成功。

    @Test
   public void getStudentInfo() throws Exception {

而這個(gè)方法就是測(cè)試網(wǎng)絡(luò)數(shù)據(jù)是否獲取成功。

 @Test
    public void testGetStudentInfoFromSever(){

以下便是測(cè)試結(jié)果
image.png

本人不善言辭,但歡迎大家批評(píng)與指正。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 34,819評(píng)論 18 399
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,300評(píng)論 25 708
  • 1.測(cè)試與軟件模型 軟件開(kāi)發(fā)生命周期模型指的是軟件開(kāi)發(fā)全過(guò)程、活動(dòng)和任務(wù)的結(jié)構(gòu)性框架。軟件項(xiàng)目的開(kāi)發(fā)包括:需求、設(shè)...
    Mr希靈閱讀 22,414評(píng)論 7 278
  • 最近發(fā)生的一些事情使很多人感嘆: 要論政治嗅覺(jué),王健林還是差了李嘉誠(chéng)一個(gè)段位。那么89歲的李嘉誠(chéng),到底還有什么過(guò)人...
    船長(zhǎng)辛巴達(dá)閱讀 254評(píng)論 0 0
  • init.d => system.d iptables => firewalld service => ...
    Elwin_myli閱讀 168評(píng)論 0 2

友情鏈接更多精彩內(nèi)容