mock怎么模擬數(shù)據(jù) 如何mock靜態(tài)方法?
如何mock靜態(tài)方法?因?yàn)閙ockito使用繼承來實(shí)現(xiàn)mock,并使用cglib來生成mock對(duì)象,而不是真正的對(duì)象來執(zhí)行。對(duì)于mock實(shí)例的方法,可以在子類中重寫,而靜態(tài)方法不能被子類重寫,因此mo
如何mock靜態(tài)方法?
因?yàn)閙ockito使用繼承來實(shí)現(xiàn)mock,并使用cglib來生成mock對(duì)象,而不是真正的對(duì)象來執(zhí)行。對(duì)于mock實(shí)例的方法,可以在子類中重寫,而靜態(tài)方法不能被子類重寫,因此mockito不能模擬靜態(tài)方法。但是powermock可以模擬靜態(tài)方法,因?yàn)樗苯釉谧止?jié)碼上工作,比如:importorg.powermock.api. mockito.PowerMockitoimportorg.powermock.core公司. classloader.annotations.PrepareForTestimportorg.powermock.modules模塊. testng.PowerMockTestCaseimport導(dǎo)入org.testng.Assertimportorg.testng.annotations注釋. 測(cè)試@PrepareForTest( 抽象動(dòng)物類)公共類AbstractAnimalTest擴(kuò)展了PowerMockTestCase{@Testpublic void shouldGetMockedHello(){PowerMockito.mockStatic文件( 抽象動(dòng)物類) 什么時(shí)候( 抽象動(dòng)物.getHello())。然后返回(“你好,模仿動(dòng)物世界!)字符串問候語=抽象動(dòng)物.getHello() Assert.assertTrue( 你好。平等(“你好,嘲笑動(dòng)物世界!“}
在單元測(cè)試中,經(jīng)常需要一些模擬操作。現(xiàn)在有一些很好的框架可以做這些事情,比如easymack,它在大多數(shù)情況下工作得很好,但是在一些結(jié)構(gòu)的設(shè)計(jì)上卻無能為力。Easymock和其他許多模擬框架只能模擬一些公共的、非靜態(tài)的或final方法。在大多數(shù)情況下,這是沒有問題的。它可以處理大多數(shù)問題,但是當(dāng)測(cè)試代碼包含一些靜態(tài)方法時(shí)。Cactus是一個(gè)基于JUnit框架的簡(jiǎn)單測(cè)試框架,用于對(duì)服務(wù)器Java代碼進(jìn)行單元測(cè)試。cactus框架的主要目標(biāo)是能夠在服務(wù)器端使用servlet對(duì)象對(duì)Java方法進(jìn)行單元測(cè)試,比如HttpServletRequest,它是單元測(cè)試的框架。例如,如果您編寫一個(gè)程序,在進(jìn)行功能測(cè)試(即整體測(cè)試)之前,想知道它是對(duì)還是錯(cuò),可以使用這些工具編寫一個(gè)單元測(cè)試用例,分別測(cè)試類或部分程序