




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、1會計學(xué)Junit單元測試管理單元測試管理單元測試的意義單元測試的意義l基本思想: 在開發(fā)功能代碼之前,先編寫測試代碼。 在明確要開發(fā)某個功能后,首先想如何對這個功能進(jìn)行測試,并完成測試代碼的編寫,然后編寫相關(guān)的代碼滿足這些測試用例。再循環(huán)進(jìn)行添加其他功能,直到完全部功能的開發(fā)。l基本過程: 明確當(dāng)前要完成的功能; 針對此功能的測試用例編寫; 測試代碼編譯不通過; 編寫對應(yīng)的功能代碼; 測試通過; 對代碼進(jìn)行重構(gòu),并保證測試通過; 循環(huán)完成所有功能的開發(fā)。 單元測試過程Junit測試流程 4.0以上版本可以用注釋(test)的方式來進(jìn)行標(biāo)注Juint在eclipse的使用JUnit的使用Ass
2、ert 斷言 JUnit為我們提供了一些輔助函數(shù),它們用來幫助我們確定被測試的方法是否按照預(yù)期的效果正常工作,通常,把這些輔助函數(shù)稱為斷言。常用斷言assertEquals(a, b)assertFalse(a)assertTrue(a)assertNotNull(a)assertNull(a)fail(String message)JUnit 4 : /value : 接下來想要測試的變量值;matcher statement : 使用 Hamcrest 匹 配符來表達(dá)的對前面變量所期望的值的聲明,如果 value 值與 matcher statement 所表達(dá)的期望值相符,則測試成功,否
3、則測試失敗。 assertThat( value, matcher statement)JUnit的使用/ is匹配符表明如果前面待測的object等于后面給出的object,則測試通過 assertThat( testedObj, is( object) ); / containsString匹配符表明如果測試的字符串包含指定的子字符串則測試通過 assertThat( testedString, containsString( developerWorks ) );/ greaterThan匹配符表明如果所測試的數(shù)值testedNumber大于16.0則測試通過 assertThat( t
4、estedNumber, greaterThan(16.0) ); / closeTo匹配符表明如果所測試的浮點(diǎn)型數(shù)testedDouble在20.00.5范圍之內(nèi)則測試通過 assertThat( testedDouble, closeTo( 20.0, 0.5 ) );/hasItem匹配符表明被測的迭代對象含有元素element項則測試通過assertThat(iterableObject, hasItem (element);TestCase生命周期單元測試應(yīng)用 對我們比較有用的一些建議 用并行樹的方式存放測試代碼; 面向測試的設(shè)計 要如何對代碼進(jìn)行測試呢?要如何對代碼進(jìn)行測試呢? 以
5、前沒有寫過單元測試的代碼怎么辦? 對于后面新寫的代碼符合寫單元測試的條件,就應(yīng)該編寫單元測試; 老代碼如果需要重構(gòu),則可以優(yōu)先考慮添加測試代碼; 用單元測試來防止已捕捉的bug再次發(fā)生,也為借用maven等工具能進(jìn)行持續(xù)的構(gòu)建與測試。Junit測試實踐組測試TestSuitesl組測試TestSuites;l異常測試;lMock在單元測試中的應(yīng)用;lSpring對單元測試的支持。實踐-組測試TestSuitespublic class AllTests public static void main(String args) junit.textui.TestRunner.run(AllTes
6、ts.suite();public static Test suite() TestSuite suite = new TestSuite(Test for junitdemo);suite.addTestSuite(StringTest.class);suite.addTestSuite(CalucatorTest.class);return suite;實踐-Exception測試實踐-Mock Objects允許你測試依賴于其它對象的方法,但那個對象非常難實例化或是太慢如資源類的等。例1 要測試Servlet的doGet()請求:HttpRequest,HttpResponse可以使用M
7、ock;例2 要測試Service層的邏輯,但dao層要依賴數(shù)據(jù)庫或是dao層只提供一個接口沒有實現(xiàn)類;實踐-Mock:轉(zhuǎn)帳實例實踐-Mock:轉(zhuǎn)帳實例 public void testTransferOk()final Account senderAccount = new Account(1, 200);final Account beneficiaryAccount = new Account(2, 100);Mockery context = new Mockery();/使用MockAccountManagerfinal AccountManager mockAccountManag
8、er = 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(senderAccount);one(mockAc
9、countManager).updateAccount(beneficiaryAccount););AccountService accountService = new AccountService();accountService.setAccountManager(mockAccountManager);/轉(zhuǎn)帳操作accountService.transfer(1, 2, 50); /驗證assertEquals(150, senderAccount.getBalance();assertEquals(150, beneficiaryAccount.getBalance();實踐-Spi
10、ng單元測試lWeb mocklJndi mockl數(shù)據(jù)庫測試實踐-Sping:webMockHttpServletRequest,MockHttpServletResponse,MockHttpSession:public void final testGettingToDetails throws ExceptionMyController myController = new MyController(); myController.setDetailsView( detailsViewName );MockHttpServletRequest request = new MockHtt
11、pServletRequest();MockHttpServletResponse response = new MockHttpServletResponse();request.setMethod(POST);request.addParameter(viewDetails, true);ModelAndView modelAndView = myController.handleRequest(request, response);assertEquals(Incorrect view name, detailsViewName,modelAndView.getViewName();實踐
12、-Sping:jndi mockprivate ClassPathXmlApplicationContext context;public void testJndi( ) throws Exception context=new ClassPathXmlApplicationContext(springFiles);SimpleNamingContextBuilder builder =SimpleNamingContextBuilder.emptyActivatedContextBuilder();DataSource ds = (DataSource) context.getBean(d
13、ataSource);builder.bind(jndi:jdbc/DataSource, ds);/ 現(xiàn)在你的數(shù)據(jù)源就是 jndi:jdbc/DataSource了實踐-Sping:數(shù)據(jù)庫測試public class MyTransactualControllerTest extends AbstractTransactionalSpringContextTests protected String getConfigLocations() return new String classpath:/test/spring-context.xml; public void testCorrec
14、tBehavior() throws Exception /運(yùn)行該事務(wù)性方法 myTransactualController.submitPayment( new Payment( 100 ) ); assertTrue( myTransactualController.isValid() ); Junit4的寫法:RunWith(SpringJUnit4ClassRunner.class) ContextConfiguration(locations = classpath:app-config.xml, classpath:mvc-config.xml) Transactional pub
15、lic 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兼容以往版本兼容以往版本u不用強(qiáng)制繼承不用強(qiáng)制繼承TestCase類類u使用注解使用注解(Annotation)來標(biāo)注測試來標(biāo)注測試
16、u對異常對異常(exception)測試改進(jìn)測試改進(jìn)public class Junit4Test Before public void init() throws Exception System.out.println(init();Before public void setUp() throws Exception System.out.println(“setUp()”);/兩個BeforeAfter public void destroy() throws Exception System.out.println(destroy();/增加Test表示為測試方法Test publi
17、c void replace() String result = abc.replace(a, b); assertEquals(bbc,result);Test(expected=ArithmeticException.class) public void divide() int num = 9/0; /異常測試開發(fā)規(guī)范開發(fā)規(guī)范需要單元測試的代碼需要單元測試的代碼1、邏輯復(fù)雜的功能;2、容易出錯的代碼;3、不易理解的代碼,即可能過段時間后自己也不易理解的代碼,而單元測試代碼有助于理解代碼的功能和需求;4、后期需求變更可能性相對比較大的,這樣后期需求更變修改代碼之后就不用太擔(dān)心寫的代碼對不對
18、以及是否破壞既存代碼邏輯了;5、項目團(tuán)隊根據(jù)行業(yè)慣例判斷,需要進(jìn)行單元測試的代碼。管理要求:管理要求:1、項目經(jīng)理在安排開發(fā)計劃時,對需要做單元測試的功能做出明確要求,在要求必須開展單元測試的同時預(yù)留足夠的單元測試時間;2、開發(fā)人員在開發(fā)過程中,如果發(fā)現(xiàn)功能需要做單元測試時,應(yīng)積極主動的開展單元測試工作,并告知項目經(jīng)理。監(jiān)監(jiān) 督:督:1、項目經(jīng)理有責(zé)任監(jiān)督項目組成員的單元工作是否按要求開展;2、技術(shù)經(jīng)理有責(zé)任監(jiān)督項目組是否有開展適當(dāng)?shù)膯卧獪y試工作。開發(fā)規(guī)范開發(fā)規(guī)范考考 評:評:1、單元測試工作將與季度考評中的以下考評內(nèi)容相關(guān)聯(lián): a、質(zhì)量:按照公司或部門工作規(guī)范開展工作如:管理規(guī)范、技術(shù)規(guī)范(
19、2分); b、質(zhì)量:工作成果滿足相應(yīng)的工作質(zhì)量要求如:需求、設(shè)計、代碼(3分); c、質(zhì)量:系統(tǒng)提交前有開展單元測試關(guān)鍵功能、集成測試、系統(tǒng)測試以及AB角測試(1分);2、項目經(jīng)理根據(jù)單元測試監(jiān)督結(jié)果對項目組成員進(jìn)行考評;3、技術(shù)經(jīng)理監(jiān)督各項目組的單元測試工作,主要核查項目組是否正確開展單元測試工作,并提供事實依據(jù)給部門負(fù)責(zé)人對項目經(jīng)理進(jìn)行考評。開發(fā)規(guī)范開發(fā)規(guī)范結(jié)束Q&AJunit測試流程 4.0以上版本可以用注釋(test)的方式來進(jìn)行標(biāo)注實踐-Mock Objects允許你測試依賴于其它對象的方法,但那個對象非常難實例化或是太慢如資源類的等。例1 要測試Servlet的doGet(
20、)請求:HttpRequest,HttpResponse可以使用Mock;例2 要測試Service層的邏輯,但dao層要依賴數(shù)據(jù)庫或是dao層只提供一個接口沒有實現(xiàn)類;實踐-Mock:轉(zhuǎn)帳實例實踐-Mock:轉(zhuǎn)帳實例 public void testTransferOk()final Account senderAccount = new Account(1, 200);final Account beneficiaryAccount = new Account(2, 100);Mockery context = new Mockery();/使用MockAccountManagerfina
21、l AccountManager 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).update
22、Account(senderAccount);one(mockAccountManager).updateAccount(beneficiaryAccount););AccountService accountService = new AccountService();accountService.setAccountManager(mockAccountManager);/轉(zhuǎn)帳操作accountService.transfer(1, 2, 50); /驗證assertEquals(150, senderAccount.getBalance();assertEquals(150, beneficiaryAccount.getBalance();實踐-
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 個人提供培訓(xùn)合同標(biāo)準(zhǔn)文本
- 2025二手車買賣合同范本
- 代理加工鋼材合同標(biāo)準(zhǔn)文本
- 公司和房產(chǎn)中介簽合同標(biāo)準(zhǔn)文本
- 信托服務(wù)服務(wù)合同標(biāo)準(zhǔn)文本
- 借款抵償合同標(biāo)準(zhǔn)文本
- 公司股合同標(biāo)準(zhǔn)文本標(biāo)準(zhǔn)文本
- 保管服務(wù)合同標(biāo)準(zhǔn)文本
- 個人私募合同樣本
- 五華區(qū)輕鋼別墅合同標(biāo)準(zhǔn)文本
- 07K103-2 防排煙系統(tǒng)設(shè)備及附件選用及安裝
- 新版高中物理必做實驗?zāi)夸浖捌鞑?(電子版)
- 2024年中考英語新熱點(diǎn)時文閱讀-中華文化(二)
- 對老賴的拘留申請書
- 1社戲 公開課一等獎創(chuàng)新教學(xué)設(shè)計
- 廣東計算機(jī)一級考試試題和答案
- 山東省濟(jì)南市育英中學(xué) 2023-2024學(xué)年下學(xué)期八年級期中英語試卷
- (高清版)JTGT D81-2017 公路交通安全設(shè)施設(shè)計細(xì)則
- 2023-2024全國初中物理競賽試題-杠桿(解析版)
- 部編版道德與法治六下《第6課 探訪古代文明》課件
- 山東銹石測報告亞興石材文檔
評論
0/150
提交評論