Mock以及Mockito的使用

您所在的位置:网站首页 spy是啥意思啊 Mock以及Mockito的使用

Mock以及Mockito的使用

2023-12-11 12:17| 来源: 网络整理| 查看: 265

mockito

 

http://www.vogella.com/tutorials/Mockito/article.html

原文地址:

http://www.open-open.com/lib/view/open1462177583813.html

 

在第一篇文章里面 我们提到,返回类型为void方法的单元测试方式,往往是验证里面的某个对象的某个方法是否得到了调用。在那篇文章里面,我举的例子是activity里面的一个login方法:

1 public void login() { 2 String username = ...//get username from username EditText 3 String password = ...//get password from password EditText 4 //do other operation like validation, etc 5 ... 6 7 mUserManager.performLogin(username, password); 8 }

 

对于这个login方法的单元测试,应该是调用Activity里面的这个login方法,然后验证 mUserManager 的 performLogin 方法得到了验证。但是如果使用Activity,我们就需要用到 Robolectric 框架,然而我们到目前为止还没有讲到Robolectric的使用。所以在这篇文章中,我们假设这段代码是放在一个Presenter(LoginPresenter)里面的,这个是 MVP模式 里面的概念,这个 LoginPresenter 是一个纯java类,而用户名和密码是外面传进来的:

1 public class LoginPresenter { 2 private UserManager mUserManager = new UserManager(); 3 4 public void login(String username, String password) { 5 if (username == null || username.length() == 0) return; 6 if (password == null || password.length() < 6) return; 7 8 mUserManager.performLogin(username, password); 9 } 10 11 }

 

根据 前面一篇关于JUnit的文章 的讲解,我们很容易的写出针对 login() 方法的单元测试:

1 public class LoginPresenterTest { 2 3 @Test 4 public void testLogin() throws Exception { 5 LoginPresenter loginPresenter = new LoginPresenter(); 6 loginPresenter.login("xiaochuang", "xiaochuang password"); 7 8 //验证LoginPresenter里面的mUserManager的performLogin()方法得到了调用,同时参数分别是“xiaochuang”、“xiaochuang‘s password” 9 ... 10 } 11 }

 

现在,关键的问题来了,怎么验证 LoginPresenter 里面的 mUserManager 的 performLogin() 方法得到了调用,以及它的参数是正确性呢?如果大家看了 该系列的第一篇文章 就知道,这里需要用到 mock ,那么接下来,我们就介绍mock这个东西。

Mock的概念:两种误解

Mock的概念,其实很简单,我们前面也介绍过:所谓的mock就是创建一个类的虚假的对象,在测试环境中,用来替换掉真实的对象,以达到两大目的:

验证这个对象的某些方法的调用情况,调用了多少次,参数是什么等等

指定这个对象的某些方法的行为,返回特定的值,或者是执行特定的动作

要使用Mock,一般需要用到mock框架,这篇文章我们使用 Mockito 这个框架,这个是Java界使用最广泛的一个mock框架。

对于上面的例子,我们要验证 mUserManager 的一些行为,首先要mock UserManager这个类,mock这个类的方式是:

Mockito.mock(UserManager.class); mock了 UserManager 类之后,我们就可以开始测试了:

1 public class LoginPresenterTest { 2 3 @Test 4 public void testLogin() { 5 Mockito.mock(UserManager.class); //


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3