国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

java的單元測(cè)試-mock測(cè)試

這篇具有很好參考價(jià)值的文章主要介紹了java的單元測(cè)試-mock測(cè)試。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

簡介

對(duì)于普通的方法,通常采用斷言測(cè)試。
對(duì)于接口,需要使用mockMvc
對(duì)于未開發(fā)的功能,需要mockBean模擬一個(gè)業(yè)務(wù)bean

Assert

java自身攜帶的工具類,也可以用于一些對(duì)拋出異常要求不高的業(yè)務(wù)或者存在全局異常的項(xiàng)目

Assert.notNull(in,"入?yún)⒉淮嬖?);

另外有一個(gè)更加簡單的寫法,以assert開頭

assert method != null;

mockMVC

曾使用注入方式得到mockMvc,類加上@WebMvcTest注解,實(shí)際測(cè)試發(fā)現(xiàn)這樣回影響service bean的注入。

@Slf4j
@SpringBootTest
public class MvcTest {
    private MockMvc mockMvc;
    @Autowired
    protected WebApplicationContext wac;

    @SneakyThrows
    @Test
    void testGetOne(){
        mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();
        TestGeOne in = new TestGeOne();
        in.setId(1);
        JSONObject jsonObject = new JSONObject();
        mockMvc.perform(MockMvcRequestBuilders.post("/test/getOne").content(JSON.toJSONBytes(in)).contentType(MediaType.APPLICATION_JSON))
                .andExpect(status().isOk())
                .andExpectAll(MockMvcResultMatchers.content().contentType(MediaType.APPLICATION_JSON),
                        MockMvcResultMatchers.jsonPath("$.data.id",Is.is(1)),
                        MockMvcResultMatchers.jsonPath("$.data.name").isString())
                .andDo(MockMvcResultHandlers.print());
    }
}

優(yōu)化

添加BeforeEach注解,用于每次初始化mock

    @Autowired
    private WebApplicationContext webApplicationContext;
    private MockMvc mockMvc;

    @MockBean
    private TestServcie testServcie;

    //在每個(gè)測(cè)試方法執(zhí)行之前都初始化MockMvc對(duì)象
    @BeforeEach
    public void setupMockMvc() {
        mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
    }

mockBean(模擬bean和測(cè)試接口)

關(guān)鍵引用import static org.mockito.Mockito.*;
否則使用Mockito.when
另外就是在接口或者實(shí)現(xiàn)方法上加MockBean,這里注解可以放接口也可以具體的實(shí)現(xiàn)service。

注意mock(TestGetOneRes.class);實(shí)際測(cè)試中存在問題

@Slf4j
@SpringBootTest
public class MockBeanTest {
    @Autowired
    private WebApplicationContext webApplicationContext;
    private MockMvc mockMvc;

    @MockBean
    private TestServcie testServcie;

    //在每個(gè)測(cè)試方法執(zhí)行之前都初始化MockMvc對(duì)象
    @BeforeEach
    public void setupMockMvc() {
        mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
        TestGetOneRes testGetOneRes = new TestGetOneRes();
        testGetOneRes.setId(1);
        testGetOneRes.setName("mock 測(cè)試");
        //靜態(tài)導(dǎo)入import static org.mockito.Mockito.*;才能使用when方法
        when(testServcie.getOne(1)).thenReturn(testGetOneRes);
        //另一種寫法
        TestGetOneRes testGetOneRes2 = new TestGetOneRes();
        testGetOneRes2.setId(2);
        doReturn(testGetOneRes2).when(testServcie).getOne(2);
    }

    @SneakyThrows
    @Test
    void testGetOne(){
        TestGeOne in = new TestGeOne();
        in.setId(1);
        Assert.notNull(in,"入?yún)⒉淮嬖?);
        mockMvc.perform(MockMvcRequestBuilders.post("/test/getOne").content(JSON.toJSONBytes(in)).contentType(MediaType.APPLICATION_JSON))
                .andExpect(status().isOk())
                .andExpectAll(MockMvcResultMatchers.content().contentType(MediaType.APPLICATION_JSON),
                        MockMvcResultMatchers.jsonPath("$.data.id", Is.is(1)),
                        MockMvcResultMatchers.jsonPath("$.data.name").isString())
                .andDo(MockMvcResultHandlers.print());
    }

}

當(dāng)出現(xiàn)多個(gè)mock都符合條件的時(shí)候,一般是最后一條mock生效。
但是如果中間出現(xiàn)拋異常,就直接返回了文章來源地址http://www.zghlxwxcb.cn/news/detail-401280.html

        //入?yún)⒌扔谀硞€(gè)值
        Mockito.when(testServcie.getOne(Mockito.eq(1))).thenReturn(testGetOneRes);
        //任意值
        Mockito.when(testServcie.getOne(Mockito.any())).thenReturn(testGetOneRes);
        //拋異常
        Mockito.when(testServcie.getOne(Mockito.isNotNull())).thenThrow(MyException.class);
        //自定義
        Mockito.when(testServcie.getOne(Mockito.anyInt())).thenAnswer(new Answer() {
            @Override
            public Object answer(InvocationOnMock invocationOnMock) throws Throwable {
                Method method = invocationOnMock.getMethod();
                Object[] arguments = invocationOnMock.getArguments();
                //這里是因?yàn)橹挥幸粋€(gè)入?yún)?,所以就直接使用第一參?shù)
                Integer id = (Integer)arguments[0];
                TestGetOneRes testGetOneRes = new TestGetOneRes();
                testGetOneRes.setId(id);
                testGetOneRes.setName(id + ":" + new Date().toString());
                return testGetOneRes;
            }
        });

到了這里,關(guān)于java的單元測(cè)試-mock測(cè)試的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Java的單元測(cè)試Testng和mock

    目錄 單元測(cè)試重要性 TestNG TestNG官網(wǎng)介紹 TestNG教程 TestNG注解:?

    2024年02月07日
    瀏覽(20)
  • junit單元測(cè)試mock私有private方法和靜態(tài)static方法

    我們知道org.mockito.Mockito功能有限,不能mock 私有private、受保護(hù)的protected方法 org.powermock.api.mockito.PowerMockito更強(qiáng)大,支持對(duì)private和protected和static方法的mock 別忘記,首先要引入maven依賴 有如下私有方法需要mock 這時(shí)候可以利用PowerMockito的spy方法mock出方法所在的對(duì)象,然后利用

    2024年02月12日
    瀏覽(21)
  • Java用正確的姿勢(shì)寫單元測(cè)試以及mock

    對(duì)于一些簡單的功能或業(yè)務(wù),我們也許可以通過前端調(diào)試、postman等接口工具、main函數(shù)調(diào)用進(jìn)行測(cè)試。但這每次改動(dòng)代碼都要人力測(cè)試,耗費(fèi)大量的人力資源且不高效,真正的項(xiàng)目中單元測(cè)試是必不可少的。 單元測(cè)試的三步走: 1、組裝方法入?yún)?2、執(zhí)行方法 3、對(duì)方法的執(zhí)行

    2024年02月13日
    瀏覽(28)
  • 在Java微服務(wù)項(xiàng)目中,如何使用Mock來進(jìn)行單元測(cè)試?

    在Java微服務(wù)項(xiàng)目中,如何使用Mock來進(jìn)行單元測(cè)試?

    摘要: 在系統(tǒng)開發(fā)的過程中,單元測(cè)試是其中的一個(gè)重要環(huán)節(jié)。在Java微服務(wù)項(xiàng)目中,Spring框架本身就為我們提供了一套單元測(cè)試的框架SpringBootTest。如果我們?cè)趯W(xué)校完成課堂作業(yè)或出于興趣愛好自學(xué),是可以使用Spring自帶的單元測(cè)試框架進(jìn)行單測(cè)的。 工作中,這種通過Spri

    2024年02月16日
    瀏覽(21)
  • 大型企業(yè)通常如何進(jìn)行單元測(cè)試?

    大型企業(yè)通常如何進(jìn)行單元測(cè)試?

    你平時(shí)是怎么做 單元測(cè)試 的? 面試官心理預(yù)期 面試官詢問單元測(cè)試并非僅僅想了解這一概念,背后可能考察面試者以下三個(gè)方面: · 對(duì)軟件工程生命周期的熟悉程度,以及對(duì)測(cè)試階段各種方法(包括單元測(cè)試、集成測(cè)試、冒煙測(cè)試等)和其重要性的理解。 ·? 面試者是否

    2024年04月11日
    瀏覽(21)
  • 非Springboot項(xiàng)目使用powermockito單元測(cè)試 mock靜態(tài)方法和ScriptEngineManager providers.next()...not a subtype報(bào)錯(cuò)解決

    非Springboot項(xiàng)目使用powermockito單元測(cè)試 mock靜態(tài)方法和ScriptEngineManager providers.next()...not a subtype報(bào)錯(cuò)解決

    使用PowerMockito.mockStatic() 加上@RunWith和@PrepareForTest注釋 如果報(bào)錯(cuò)下面的錯(cuò)則考慮加上@PowerMockIgnore ERROR StatusLogger Unable to unregister MBeans java.lang.LinkageError: javax/management/MBeanServer(具體如下) 解決:加上@PowerMockIgnore(\\\"javax.management.*) ScriptEngineManager providers.next(): javax.script.ScriptEng

    2024年02月15日
    瀏覽(22)
  • Service層代碼單元測(cè)試以及單元測(cè)試如何Mock

    Service層代碼單元測(cè)試以及單元測(cè)試如何Mock

    接著上一篇文章:單元測(cè)試入門篇,本篇文章作為單元測(cè)試的進(jìn)階篇,主要介紹如何對(duì)Springboot Service層代碼做單元測(cè)試,以及單元測(cè)試中涉及外調(diào)服務(wù)時(shí),如何通過Mock完成測(cè)試。 現(xiàn)在項(xiàng)目都流行前后端代碼分離,后端使用springboot框架,在service層編寫接口代碼實(shí)現(xiàn)邏輯。假設(shè)

    2023年04月08日
    瀏覽(18)
  • 單元測(cè)試junit+mock

    單元測(cè)試junit+mock

    單元測(cè)試(unit testing),是指對(duì)軟件中的最小可測(cè)試單元進(jìn)行檢查和驗(yàn)證。至于“單元”的大小或范圍,并沒有一個(gè)明確的標(biāo)準(zhǔn),“單元”可以是一個(gè)方法、類、功能模塊或者子系統(tǒng)。 單元測(cè)試通常和白盒測(cè)試聯(lián)系到一起 ,如果單從概念上來講兩者是有區(qū)別的,不過我們通

    2024年02月08日
    瀏覽(36)
  • Testify Mock 單元測(cè)試

    Testify 提供了單測(cè)方便的斷言能力,這里的斷言是將對(duì)代碼實(shí)際返回的斷言,代碼的實(shí)際輸出和預(yù)期是否一致。下面是 gin-gonic/gin 代碼庫的單測(cè)代碼,Testify 還提供了很多其他的方法: 單元測(cè)試中也會(huì)存在不穩(wěn)定的代碼,我們的入?yún)㈦m然保持不變,但每次單測(cè)的結(jié)果可能會(huì)發(fā)

    2024年02月03日
    瀏覽(25)
  • 單元測(cè)試與Mock

    單元測(cè)試與Mock

    作者:一笑欽陳 郵箱:xianqin_chen@163.com 你好,我是一笑欽陳,《零零后程序員成長之路》作者,一線互聯(lián)網(wǎng) Java 工程師。很高興你閱讀我的博客,讓我們共同成長進(jìn)步! 提醒:在接下來您對(duì)本博客的閱讀中,如果遇到一些內(nèi)容、圖稿、代碼等中的勘誤都可以通過郵件進(jìn)行反

    2024年02月08日
    瀏覽(46)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包