成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

單元測(cè)試

Atom / 446人閱讀

摘要:在對(duì)邏輯進(jìn)行重構(gòu)的時(shí)候可以直接通過單元測(cè)試能把控整個(gè)重構(gòu)的邏輯不發(fā)生重大偏差,給后來者造福了。服務(wù)單元測(cè)試下面是一段獲取緩存邏輯的單元測(cè)試。

單元測(cè)試在開發(fā)的過程中可能會(huì)被很多的人所忽略,其實(shí)也不是真的被忽略可能是由于巨大的業(yè)務(wù)壓力而導(dǎo)致沒有時(shí)間去寫那些測(cè)試,而是直接通過集成測(cè)試完沒問題就提交給測(cè)試進(jìn)行測(cè)試后上線了。這樣其實(shí)很多時(shí)候反而會(huì)浪費(fèi)大量的時(shí)間在測(cè)試上面,而適量的寫好單元測(cè)試有以下一些優(yōu)勢(shì):

有單元測(cè)試可能會(huì)提高整個(gè)集成測(cè)試的進(jìn)度而且最重要的是做到對(duì)自己寫的代碼知根知底,更有底氣的推到線上去。

在對(duì)邏輯進(jìn)行重構(gòu)的時(shí)候可以直接通過單元測(cè)試能把控整個(gè)重構(gòu)的邏輯不發(fā)生重大偏差,給后來者造福了。

服務(wù)單元測(cè)試

下面是一段獲取緩存邏輯的單元測(cè)試。CacheManager中封裝了邏輯從緩沖中取數(shù)據(jù),如果數(shù)據(jù)沒有取到則從repositoryCache.loadStoreByKey(key)中l(wèi)oad數(shù)據(jù)。

public void getValueIfNullLoadTest() {
    /* 從repository里面取數(shù)據(jù) */
    RepositoryCache repositoryCache = mock(RepositoryCache.class);
    String key = anyString();
    when(repositoryCache.loadStoreByKey(key)).thenReturn("test");
    when(repositoryCache.getCacheName()).thenReturn(Constants.CACHE);

    CacheManager.addRepository(repositoryCache);
    String value = CacheManager.getValueIfNullLoad(Constants.CACHE, key, String.class);

    Assert.assertTrue(StringUtils.equals(value, "test"));

    /* 從緩存中取 */
    value = CacheManager.getValueByCache(Constants.CACHE, key, String.class);
    Assert.assertTrue(StringUtils.equals(value, "test"));

}

mockrepositoryCache,當(dāng)調(diào)用repositoryCacheloadStoreByKey或者getCacheName方法后返回測(cè)試數(shù)據(jù)。

后面執(zhí)行CacheManager.getValueIfNullLoad中正常的業(yè)務(wù)邏輯。

最后判斷結(jié)果是否符合預(yù)期。

controller單元測(cè)試

上面一小節(jié)只是針對(duì)普通的服務(wù)單元進(jìn)行測(cè)試,但是遇到http的接口測(cè)試就無能為力了,下面來介紹下如果寫http接口的單元測(cè)試。

public class UserControllerUnitTest {

    private MockMvc mockMvc;

    @Mock
    private UserService userService;

    @InjectMocks
    private UserController userController;

    @Before
    public void init(){
        MockitoAnnotations.initMocks(this);
        mockMvc = MockMvcBuilders
                .standaloneSetup(userController)
                .addFilters(new CORSFilter())
                .build();
    }

    @Test
    public void test_get_all_success() throws Exception {
        List users = Arrays.asList(
                new User(1, "Daenerys Targaryen"),
                new User(2, "John Snow"));
        when(userService.getAll()).thenReturn(users);
        mockMvc.perform(MockMvcRequestBuilders.get("/users"))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE))
                .andExpect(mvcResult -> {
                    String responseStr = mvcResult.getResponse().getContentAsString();
                    //針對(duì)結(jié)果進(jìn)行驗(yàn)證。
                });
        Mockito.verify(userService, times(1)).getAll();
        Mockito.verifyNoMoreInteractions(userService);
    }

}

mock一個(gè)服務(wù)userService

InjectMocks userController后通過MockitoAnnotations.initMocks(this)userService這個(gè)mock的服務(wù)注入到userController中。

MockMvcBuilders.standaloneSetup(userController).build(); 創(chuàng)建MockMvc。

后面就是模擬發(fā)送http請(qǐng)求,然后驗(yàn)證response的操作和上一節(jié)的類似。

最后是驗(yàn)證mock服務(wù)的接口調(diào)用次數(shù)。

總結(jié)

可能你也會(huì)在項(xiàng)目中看到很多的單元測(cè)試,但是隨著項(xiàng)目的迭代那些單元測(cè)試已經(jīng)失效,又或者是你會(huì)看到在進(jìn)行單元測(cè)試的時(shí)候會(huì)去啟動(dòng)整個(gè)項(xiàng)目容器去做運(yùn)行,不過只要有就是好的,后面在進(jìn)行項(xiàng)目迭代的過程中別忘了把unit test寫上吧。

參考

Unit Test Spring MVC Rest Service: MockMVC, JUnit, Mockito

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/70489.html

相關(guān)文章

  • 隨行付微服務(wù)測(cè)試單元測(cè)試

    摘要:輸出結(jié)果需要人工檢查的測(cè)試不是一個(gè)好的單元測(cè)試。為了有效的進(jìn)行單元測(cè)試,需要遵循一定的方法,通常采用路徑覆蓋法設(shè)計(jì)單元測(cè)試用例。 在微服務(wù)架構(gòu)下高覆蓋率的單元測(cè)試是保障代碼質(zhì)量的第一道也是最重要的關(guān)口,應(yīng)該持之以恒。 背景 單元測(cè)試為代碼質(zhì)量保駕護(hù)航,是提高業(yè)務(wù)質(zhì)量的最直接手段,實(shí)踐證明,非常多的缺陷完全可以通過單元測(cè)試來發(fā)現(xiàn),測(cè)試金字塔提出者M(jìn)artin Fowler 強(qiáng)調(diào)如果一個(gè)高...

    xiguadada 評(píng)論0 收藏0
  • 談?wù)劄槭裁磳?em>單元測(cè)試

    摘要:原文作者鍵盤男單元測(cè)試是什么單元測(cè)試是針對(duì)程序的最小單元來進(jìn)行正確性檢驗(yàn)的測(cè)試工作。因此,首要任務(wù),就是對(duì)單元測(cè)試全面了解。作為一名經(jīng)驗(yàn)豐富的程序員,寫單元測(cè)試更多的是對(duì)自己的代碼負(fù)責(zé)。 原文:http://www.jianshu.com/p/bc99678b1d6e作者:鍵盤男kkmike999 showImg(/img/bVCqyN); 單元測(cè)試是什么 單元測(cè)試 是針對(duì) 程序的最小...

    ermaoL 評(píng)論0 收藏0
  • 2021年軟件測(cè)試工具總結(jié)——單元測(cè)試工具

    摘要:?jiǎn)卧獪y(cè)試框架作為的標(biāo)準(zhǔn)庫,是其他單元測(cè)試框架的基礎(chǔ)??梢院秃团浜鲜褂镁帉憜卧獪y(cè)試。官網(wǎng)地址單元測(cè)試覆蓋率工具單元測(cè)試中還需要用到代碼覆蓋率工具。代碼覆蓋率統(tǒng)計(jì)工具用來發(fā)現(xiàn)沒有被測(cè)試覆蓋的代碼,完善單元測(cè)試的覆蓋率。 在應(yīng)用程序中,單元是具有一個(gè)或多個(gè)輸入和單個(gè)輸出的軟件中最小可測(cè)試部分。單元...

    qingshanli1988 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<