单元测试系列之模拟利器Mockito

发表于:2012-6-26 10:47

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:stamen    来源:51Testing软件测试网采编

  设定Mock对象的期望行为及返回值

  从上文中我们已经知道可以通过when(mock.someMethod()).thenReturn(value)来设定Mock对象的某个方法调用时的返回值,但它也同样有限制条件:对于static和final修饰的方法是无法进行设定的。下面我们通过实例来介绍一下如何调用方法及设定返回值。

  Java代码

import org.junit.Test;
import org.mockito.Mock;
import com.baobaotao.domain.User;
import com.baobaotao.service.UserService;
import com.baobaotao.service.UserServiceImpl;

public class MockitoSampleTest {
     …

     //① 模拟接口UserService测试
 @Test
 public void testMockInterface() {
          //①-1 对方法设定返回值 
 when(mockUserService.findUserByUserName("tom")).thenReturn(
    new User("tom", "1234"));
//①-2 对方法设定返回值 
doReturn(true).when(mockServiceImpl).hasMatchUser("tom", "1234");
 //①-3 对void方法进行方法预期设定
User u = new User("John", "1234");
 doNothing().when(mockUserService).registerUser(u);

//①-4 执行方法调用
  User user = mockUserService.findUserByUserName("tom");
  boolean isMatch = mockUserService.hasMatchUser("tom","1234");
      mockUserService.registerUser(u);

  assertNotNull(user);
  assertEquals(user.getUserName(), "tom");
  assertEquals(isMatch, true);
 }

 //② 模拟实现类UserServiceImpl测试
@Test
 public void testMockClass() {
          // 对方法设定返回值
  when(mockServiceImpl.findUserByUserName("tom"))
.thenReturn(new User("tom", "1234"));
 doReturn(true).when(mockServiceImpl).hasMatchUser("tom", "1234");

  User user = mockServiceImpl.findUserByUserName("tom");
  boolean isMatch = mockServiceImpl.hasMatchUser("tom","1234");
  assertNotNull(user);
  assertEquals(user.getUserName(), "tom");
  assertEquals(isMatch, true);
 }
 
 //③ 模拟User类测试
@Test
 public void testMockUser() {
  when(mockUser.getUserId()).thenReturn(1);
  when(mockUser.getUserName()).thenReturn("tom");
  assertEquals(mockUser.getUserId(),1);
  assertEquals(mockUser.getUserName(), "tom");
 }

  在①处,模拟测试接口UserService的findUserByUserName()方法、hasMatchUser()方法及registerUser()方法。在①-1处通过when().thenReturn()语法,模拟方法调用及设置方法的返回值,实例通过模拟调用UserService 用户服务接口的查找用户findUserByUserName()方法,查询用户名为“tom”详细的信息,并设置返回User对象:new User("tom", "1234")。在①-2处通过doReturn (). when ()语法,模拟判断用户hasMatchUser()方法的调用,判断用户名为“tom”及密码为“1234”的用户存在,并设置返回值为:true。在①-3处对void方法进行方法预期设定,如实例中调用注册用户registerUser()方法。设定调用方法及返回值之后,就可以执行接口方法调用验证。在②处和③处,模拟测试用户服务实现类UserServiceImpl,测试的方法与模拟接口一致。

32/3<123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号