美文网首页码农进阶之旅Android开发Android知识
AndroidStudio测试(四)单元测试Mock以及Mock

AndroidStudio测试(四)单元测试Mock以及Mock

作者: 泅渡者 | 来源:发表于2017-02-16 15:10 被阅读155次

网络测试

这篇文章我们模拟一个场景:我们在学校教务软件中要获取学生的信息,获取方式有两种第一种是通过本地数据库获取,第二种是通过网络获取。
为此我们新建一个Student类来描述学生信息如下:

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

接下来我们建一个接口用来获取学生的信息。

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

但是此时我们不去实现这个接口,因为工作时很多情况都是分工合作,你做的功能需要别人的配合,往往会影响开发效率,那么我们该怎么去测试自己的代码呢,下面我们建立一个StuController类来控制是从何处获取学生信息。

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("模拟网络获取学生信息");
        Student student = new Student();
        student.id = 12;
        student.name = "网络名";
        return student;
    }

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

以上代码相信大家都能看懂,下面我们建立一个Student测试类

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("网络名",student.name);

    }

}

从上面代码可以看到,我们并没有实现StudentDao,我们只是应用Mock 创建了一个studentDao的实例。
上面这个方法是测试数据库获取数据是否成功。

    @Test
   public void getStudentInfo() throws Exception {

而这个方法就是测试网络数据是否获取成功。

 @Test
    public void testGetStudentInfoFromSever(){

以下便是测试结果 image.png

本人不善言辞,但欢迎大家批评与指正。

相关文章

  • AndroidStudio测试(四)单元测试Mock以及Mock

    网络测试 这篇文章我们模拟一个场景:我们在学校教务软件中要获取学生的信息,获取方式有两种第一种是通过本地数据库获取...

  • python mock server实现:flask

    一、什么是mock mock,即模拟。模拟一个对象,模拟接口返回。 二、什么场景要用mock 1、单元测试: 由于...

  • Jmokit

    # Junit+Jmokit单元测试 标签(空格分隔):java单元测试 --- > 原理:mock测试就是在测试...

  • spring-cloud feginClient unit te

    最近单元测试时碰到需要mock feginClient的接口 因为项目中存在fegin的hystrix,在mock...

  • php单元测试进阶(13)- 核心技术 - mock对象 - 同

    php单元测试进阶(13)- 核心技术 - mock对象 - 同时使用mock和stub 本系列文章主要代码与文字...

  • python Mock的使用(1)

    什么是mock? mock在翻译过来有模拟的意思。这里要介绍的mock是辅助单元测试的一个模块。它允许您用模拟对象...

  • 优雅的模拟测试框架mock,用于Java的单元测试

    什么是mock ? mock在翻译过来是模拟的意思。这里要介绍的mock是辅助单元测试的一个模块。它允许你用模拟对...

  • Python unittest.mock基本使用

    什么是mock? mock在翻译过来有模拟的意思。这里要介绍的mock是辅助单元测试的一个模块。它允许您用模拟对象...

  • Mockito使用总结

    Mockito介绍 Mockito就是一个优秀的用于单元测试的mock框架。在软件开发中提及”mock”,通常理解...

  • Mockito

    在单元测试中,为了隔离外部资源,使用mock构造一个虚拟对象,保证测试的目标函数能正常运行。有很多Mock方式,M...

网友评论

    本文标题:AndroidStudio测试(四)单元测试Mock以及Mock

    本文链接:https://www.haomeiwen.com/subject/adpxwttx.html