spring boot test中mockito的运用

mock的意义

在微服务盛行的当下,开发过程中往往出现A应用中某功能的实现需要调用B应用的接口,无论使用RPC还是restful都需要B应用提供接口的实现整个开发工作才能继续进行。从而导致A应用的开发停滞,整个系统的开发效率降低。

这时该mock出场了。通过模拟一个接口的实现,让A应用假设能够正常调用B应用,并得到相应的返回值或产生指定类型的异常。

待B应用的接口实现开发完成再取消mock,实现真正的调用。

以下演示在spring boot test中使用mockito模拟接口实现的使用方式。

引入相关依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
<dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <scope>test</scope>
</dependency>

待测试接口

public interface UserService {
    
    public User findOne(Long id);
}

待测试POJO

public class User {
    private Long id;
    private String name;
    private Date createDate;
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Date getCreateDate() {
        return createDate;
    }
    public void setCreateDate(Date createDate) {
        this.createDate = createDate;
    }
}

编写测试类

import static org.mockito.Mockito.when;

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = { AppStart.class })
public class TestUserService {

    @Mock
    private UserService userService;

    private Logger logger = LoggerFactory.getLogger(getClass());
    
    @Before
    public void setUp(){
        User mockUser = new User();
        mockUser.setName("john");
        mockUser.setId(1L);
        mockUser.setCreateDate(new Date());
        when(userService.findOne(1L)).thenReturn(mockUser);
    }

    @Test
    public void findOneTest() {
        User user = userService.findOne(1L);
        logger.info("user.name = {}",user.getName());
        Assert.assertEquals(user.getName(), "john");
    }
}

总结

  • 使用@Mock注解对测试接口进行修饰。该注解位于org.mockito.Mock中
  • 使用when().thenReturn()方法指定测试接口中某方法的返回值。(也可以指定抛出的异常类型等)。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,293评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,941评论 25 709
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 47,014评论 6 342
  • 原文链接 : Unit tests with Mockito - Tutorial 原文作者 : vogella ...
    曾梓华阅读 34,720评论 2 50
  • 他是个哑巴。 他并不会书写。 没有人知道他以何为生。他白日如同鬼魅,夜晚恐惧。他使人早已忘记的,埋藏心底的,用层层...
    book君阅读 4,151评论 0 0