Junit單元測(cè)試管理ppt課件_第1頁
Junit單元測(cè)試管理ppt課件_第2頁
Junit單元測(cè)試管理ppt課件_第3頁
Junit單元測(cè)試管理ppt課件_第4頁
Junit單元測(cè)試管理ppt課件_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、單元測(cè)試管理要求2019-05-14目錄提綱目錄提綱單元測(cè)試的益處單元測(cè)試的益處可以提高代碼質(zhì)量;可以提高代碼質(zhì)量;有助于設(shè)計(jì)簡單明晰而易用的接口;有助于設(shè)計(jì)簡單明晰而易用的接口;模塊切分的足夠小但是模塊間堅(jiān)持極低的耦模塊切分的足夠小但是模塊間堅(jiān)持極低的耦合度;合度;測(cè)試代碼是測(cè)試代碼是“活的軟件文檔,它硬性規(guī)定活的軟件文檔,它硬性規(guī)定了實(shí)現(xiàn)代碼必需滿足的需求,達(dá)不到就報(bào)了實(shí)現(xiàn)代碼必需滿足的需求,達(dá)不到就報(bào)錯(cuò)。錯(cuò)。降低重構(gòu)難度,可肆無忌憚的重構(gòu);降低重構(gòu)難度,可肆無忌憚的重構(gòu);減少維護(hù)本錢;減少維護(hù)本錢;很容易構(gòu)建集成測(cè)試,及自動(dòng)測(cè)試。很容易構(gòu)建集成測(cè)試,及自動(dòng)測(cè)試。成熟的開源框架或工具都有良

2、好的單元測(cè)試成熟的開源框架或工具都有良好的單元測(cè)試代碼,是很好的學(xué)習(xí)工具。代碼,是很好的學(xué)習(xí)工具。單元測(cè)試的意義單元測(cè)試的意義l根本思想:l 在開發(fā)功能代碼之前,先編寫測(cè)試代碼。l 在明確要開發(fā)某個(gè)功能后,首先想如何對(duì)這個(gè)功能進(jìn)展測(cè)試,并完成測(cè)試代碼的編寫,然后編寫相關(guān)的代碼滿足這些測(cè)試用例。再循環(huán)進(jìn)展添加其他功能,直到完全部功能的開發(fā)。l根本過程:l明確當(dāng)前要完成的功能;l針對(duì)此功能的測(cè)試用例編寫;l測(cè)試代碼編譯不經(jīng)過;l編寫對(duì)應(yīng)的功能代碼;l測(cè)試經(jīng)過;l對(duì)代碼進(jìn)展重構(gòu),并保證測(cè)試經(jīng)過;l循環(huán)完成一切功能的開發(fā)。l 單元測(cè)試過程Junit測(cè)試流程 4.0以上版本可以用注釋test的方式來進(jìn)展

3、標(biāo)注Juint在eclipse的運(yùn)用JUnit的運(yùn)用Assert 斷言 JUnit為我們提供了一些輔助函數(shù),它們用來協(xié)助我們確定被測(cè)試的方法能否按照預(yù)期的效果正常任務(wù),通常,把這些輔助函數(shù)稱為斷言。常用斷言assertEquals(a, b)assertFalse(a)assertTrue(a)assertNotNull(a)assertNull(a)fail(String message)JUnit 4 : /value : 接下來想要測(cè)試的變量值;matcher statement : 運(yùn)用 Hamcrest 匹 配符來表達(dá)的對(duì)前面變量所期望的值的聲明,假設(shè) value 值與 matche

4、r statement 所表達(dá)的期望值相符,那么測(cè)試勝利,否那么測(cè)試失敗。 assertThat( value, matcher statement)JUnit的運(yùn)用/ is匹配符闡明假設(shè)前面待測(cè)的object等于后面給出的object,那么測(cè)試經(jīng)過 assertThat( testedObj, is( object) ); / containsString匹配符闡明假設(shè)測(cè)試的字符串包含指定的子字符串那么測(cè)試經(jīng)過 assertThat( testedString, containsString( developerWorks ) );/ greaterThan匹配符闡明假設(shè)所測(cè)試的數(shù)值test

5、edNumber大于16.0那么測(cè)試經(jīng)過 assertThat( testedNumber, greaterThan(16.0) ); / closeTo匹配符闡明假設(shè)所測(cè)試的浮點(diǎn)型數(shù)testedDouble在20.00.5范圍之內(nèi)那么測(cè)試經(jīng)過 assertThat( testedDouble, closeTo( 20.0, 0.5 ) );/hasItem匹配符闡明被測(cè)的迭代對(duì)象含有元素element項(xiàng)那么測(cè)試經(jīng)過assertThat(iterableObject, hasItem (element);TestCase生命周期單元測(cè)試運(yùn)用 對(duì)我們比較有用的一些建議 用并行樹的方式存放測(cè)試代碼

6、; 面向測(cè)試的設(shè)計(jì) 要如何對(duì)代碼進(jìn)展測(cè)試呢? 以前沒有寫過單元測(cè)試的代碼怎樣辦? 對(duì)于后面新寫的代碼符合寫單元測(cè)試的條件,就應(yīng)該編寫單元測(cè)試; 老代碼假設(shè)需求重構(gòu),那么可以優(yōu)先思索添加測(cè)試代碼; 用單元測(cè)試來防止已捕捉的bug再次發(fā)生,也為借用maven等工具能進(jìn)展繼續(xù)的構(gòu)建與測(cè)試。Junit測(cè)試實(shí)際組測(cè)試TestSuitesl組測(cè)試TestSuites;l異常測(cè)試;lMock在單元測(cè)試中的運(yùn)用;lSpring對(duì)單元測(cè)試的支持。實(shí)際-組測(cè)試TestSuitespublic class AllTests public static void main(String args) junit.tex

7、tui.TestRunner.run(AllTests.suite();public static Test suite() TestSuite suite = new TestSuite(Test for junitdemo);suite.addTestSuite(StringTest.class);suite.addTestSuite(CalucatorTest.class);return suite;實(shí)際-Exception測(cè)試實(shí)際-Mock Objects允許他測(cè)試依賴于其它對(duì)象的方法,但那個(gè)對(duì)象非常難實(shí)例化或是太慢如資源類的等。例1 要測(cè)試Servlet的doGet()懇求:Http

8、Request,HttpResponse可以運(yùn)用Mock;例2 要測(cè)試Service層的邏輯,但dao層要依賴數(shù)據(jù)庫或是dao層只提供一個(gè)接口沒有實(shí)現(xiàn)類;實(shí)際-Mock:轉(zhuǎn)帳實(shí)例實(shí)際-Mock:轉(zhuǎn)帳實(shí)例 public void testTransferOk()final Account senderAccount = new Account(1, 200);final Account beneficiaryAccount = new Account(2, 100);Mockery context = new Mockery();/運(yùn)用MockAccountManagerfinal Accoun

9、tManager mockAccountManager = context.mock(AccountManager.class);context.checking(new Expectations() one(mockAccountManager).findAccountForUser(1);will(returnValue(senderAccount);one(mockAccountManager).findAccountForUser(2);will(returnValue(beneficiaryAccount);one(mockAccountManager).updateAccount(

10、senderAccount);one(mockAccountManager).updateAccount(beneficiaryAccount););AccountService accountService = new AccountService();accountService.setAccountManager(mockAccountManager);/轉(zhuǎn)帳操作accountService.transfer(1, 2, 50); /驗(yàn)證assertEquals(150, senderAccount.getBalance();assertEquals(150, beneficiaryAc

11、count.getBalance();實(shí)際-Sping單元測(cè)試lWeb mocklJndi mockl數(shù)據(jù)庫測(cè)試實(shí)際-Sping:webMockHttpServletRequest,MockHttpServletResponse,MockHttpSession:public void final testGettingToDetails throws ExceptionMyController myController = new MyController(); myController.setDetailsView( detailsViewName );MockHttpServletRequ

12、est request = new MockHttpServletRequest();MockHttpServletResponse response = new MockHttpServletResponse();request.setMethod(POST);request.addParameter(viewDetails, true);ModelAndView modelAndView = myController.handleRequest(request, response);assertEquals(Incorrect view name, detailsViewName,mode

13、lAndView.getViewName();實(shí)際-Sping:jndi mockprivate ClassPathXmlApplicationContext context;public void testJndi( ) throws Exception context=new ClassPathXmlApplicationContext(springFiles);SimpleNamingContextBuilder builder =SimpleNamingContextBuilder.emptyActivatedContextBuilder();DataSource ds = (Data

14、Source) context.getBean(dataSource);builder.bind(jndi:jdbc/DataSource, ds);/ 如今他的數(shù)據(jù)源就是 jndi:jdbc/DataSource了實(shí)際-Sping:數(shù)據(jù)庫測(cè)試public class MyTransactualControllerTest extends AbstractTransactionalSpringContextTests protected String getConfigLocations() return new String classpath:/test/spring-context.xm

15、l; public void testCorrectBehavior() throws Exception /運(yùn)轉(zhuǎn)該事務(wù)性方法 myTransactualController.submitPayment( new Payment( 100 ) ); assertTrue( myTransactualController.isValid() ); Junit4的寫法:RunWith(SpringJUnit4ClassRunner.class) ContextConfiguration(locations = classpath:app-config.xml, classpath:mvc-conf

16、ig.xml) Transactional public class AccountServiceTest1 Test public void testGetAcccountById() Account acct = Account.getAccount(1, user01, 18, M); service.insertIfNotExist(acct); Account acct2 = service.getAccountById(1); assertEquals(acct,acct2); Junit4的新特性u(píng)兼容以往版本兼容以往版本u不用強(qiáng)迫承繼不用強(qiáng)迫承繼TestCase類類u運(yùn)用注解運(yùn)

17、用注解(Annotation)來標(biāo)注測(cè)試來標(biāo)注測(cè)試u對(duì)異常對(duì)異常(exception)測(cè)試改良測(cè)試改良public class Junit4Test Before public void init() throws Exception System.out.println(init();Before public void setUp() throws Exception System.out.println(“setUp();/兩個(gè)BeforeAfter public void destroy() throws Exception System.out.println(destroy();/

18、添加Test表示為測(cè)試方法Test public void replace() String result = abc.replace(a, b); assertEquals(bbc,result);Test(expected=ArithmeticException.class) public void divide() int num = 9/0;/異常測(cè)試開發(fā)規(guī)范開發(fā)規(guī)范需求單元測(cè)試的代碼需求單元測(cè)試的代碼1、邏輯復(fù)雜的功能;、邏輯復(fù)雜的功能;2、容易出錯(cuò)的代碼;、容易出錯(cuò)的代碼;3、不易了解的代碼,即能夠過段時(shí)間后本人也不易、不易了解的代碼,即能夠過段時(shí)間后本人也不易了解的代碼,而單元測(cè)

19、試代碼有助于了解代碼的功了解的代碼,而單元測(cè)試代碼有助于了解代碼的功能和需求;能和需求;4、后期需求變卦能夠性相對(duì)比較大的,這樣后期需、后期需求變卦能夠性相對(duì)比較大的,這樣后期需求更變修正代碼之后就不用太擔(dān)憂寫的代碼對(duì)不對(duì)求更變修正代碼之后就不用太擔(dān)憂寫的代碼對(duì)不對(duì)以及能否破壞既存代碼邏輯了;以及能否破壞既存代碼邏輯了;5、工程團(tuán)隊(duì)根據(jù)行業(yè)慣例判別,需求進(jìn)展單元測(cè)試、工程團(tuán)隊(duì)根據(jù)行業(yè)慣例判別,需求進(jìn)展單元測(cè)試的代碼。的代碼。管理要求:管理要求:1、工程經(jīng)理在安排開發(fā)方案時(shí),對(duì)需求做單元測(cè)試的功能做出明確要求、工程經(jīng)理在安排開發(fā)方案時(shí),對(duì)需求做單元測(cè)試的功能做出明確要求,在要求必需開展單元測(cè)試的同時(shí)預(yù)留足夠的單元測(cè)試時(shí)間;,在要求必需開展單元測(cè)試的同時(shí)預(yù)留足夠的單元測(cè)試時(shí)間;2、開發(fā)人員在開發(fā)過程中,假設(shè)發(fā)現(xiàn)功能需求做單元測(cè)試時(shí),應(yīng)積極自、開發(fā)人員在開發(fā)過程中,假設(shè)發(fā)現(xiàn)功能需求

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論