spring boot test中mockito的運用

mock的意義

在微服務(wù)盛行的當(dāng)下,開發(fā)過程中往往出現(xiàn)A應(yīng)用中某功能的實現(xiàn)需要調(diào)用B應(yīng)用的接口,無論使用RPC還是restful都需要B應(yīng)用提供接口的實現(xiàn)整個開發(fā)工作才能繼續(xù)進行。從而導(dǎo)致A應(yīng)用的開發(fā)停滯,整個系統(tǒng)的開發(fā)效率降低。

這時該mock出場了。通過模擬一個接口的實現(xiàn),讓A應(yīng)用假設(shè)能夠正常調(diào)用B應(yīng)用,并得到相應(yīng)的返回值或產(chǎn)生指定類型的異常。

待B應(yīng)用的接口實現(xiàn)開發(fā)完成再取消mock,實現(xiàn)真正的調(diào)用。

以下演示在spring boot test中使用mockito模擬接口實現(xiàn)的使用方式。

引入相關(guān)依賴

<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");
    }
}

總結(jié)

  • 使用@Mock注解對測試接口進行修飾。該注解位于org.mockito.Mock中
  • 使用when().thenReturn()方法指定測試接口中某方法的返回值。(也可以指定拋出的異常類型等)。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,678評論 19 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,272評論 25 708
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,283評論 6 342
  • 原文鏈接 : Unit tests with Mockito - Tutorial 原文作者 : vogella ...
    曾梓華閱讀 34,831評論 2 50
  • 他是個啞巴。 他并不會書寫。 沒有人知道他以何為生。他白日如同鬼魅,夜晚恐懼。他使人早已忘記的,埋藏心底的,用層層...
    book君閱讀 871評論 0 0

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