日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

端到端测试的滥用–测试技术2

發(fā)布時(shí)間:2023/12/3 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 端到端测试的滥用–测试技术2 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
我的上一個(gè)博客是有關(guān)測(cè)試代碼方法的一系列博客中的第一篇,概述了使用一種非常常見(jiàn)的模式從數(shù)據(jù)庫(kù)檢索地址的簡(jiǎn)單方案:

…并描述了一種非常通用的測(cè)試技術(shù): 不編寫(xiě)測(cè)試 , 而是手動(dòng)進(jìn)行所有操作。

今天的博客涵蓋了另一種實(shí)踐,我也認(rèn)為這是次優(yōu)的。 在這種情況下,開(kāi)發(fā)人員使用JUnit編寫(xiě)測(cè)試,但是在完成編寫(xiě)代碼之后并且沒(méi)有任何類(lèi)隔離的情況下編寫(xiě)測(cè)試。 這實(shí)際上是冒充單元測(cè)試的“端到端”(又稱集成)測(cè)試。

盡管昨天我說(shuō)過(guò)我只測(cè)試AddressService類(lèi),但是使用此技術(shù)的測(cè)試首先從數(shù)據(jù)庫(kù)中加載一些測(cè)試數(shù)據(jù),然后抓住AddressController來(lái)調(diào)用被測(cè)方法。 AddressController調(diào)用AddressService ,然后再調(diào)用AddressDao以獲取并返回所請(qǐng)求的數(shù)據(jù)。

@RunWith(UnitilsJUnit4TestClassRunner.class) @SpringApplicationContext("servlet-context.xml") @Transactional(TransactionMode.DISABLED) public class EndToEndAddressServiceTest {@SpringBeanByTypeprivate AddressController instance;/*** Test method for* {@link com.captaindebug.address.AddressService#findAddress(int)}.*/@Testpublic void testFindAddressWithNoAddress() {final int id = 10;BindingAwareModelMap model = new BindingAwareModelMap();String result = instance.findAddress(id, model);assertEquals("address-display", result);Address resultAddress = (Address) model.get("address");assertEquals(Address.INVALID_ADDRESS, resultAddress);}/*** Test method for* {@link com.captaindebug.address.AddressService#findAddress(int)}.*/@Test@DataSet("FindAddress.xml")public void testFindAddress() {final int id = 1;Address expected = new Address(id, "15 My Street", "My Town","POSTCODE", "My Country");BindingAwareModelMap model = new BindingAwareModelMap();String result = instance.findAddress(id, model);assertEquals("address-display", result);Address resultAddress = (Address) model.get("address");assertEquals(expected.getId(), resultAddress.getId());assertEquals(expected.getStreet(), resultAddress.getStreet());assertEquals(expected.getTown(), resultAddress.getTown());assertEquals(expected.getPostCode(), resultAddress.getPostCode());assertEquals(expected.getCountry(), resultAddress.getCountry());} }

上面的代碼使用Unitils將測(cè)試數(shù)據(jù)加載到數(shù)據(jù)庫(kù)中并在Spring上下文中加載類(lèi)。 我發(fā)現(xiàn)Nevers是一個(gè)有用的工具,它消除了編寫(xiě)此類(lèi)測(cè)試的繁瑣工作,而必須設(shè)置如此大規(guī)模的測(cè)試是一項(xiàng)艱巨的工作。

這種測(cè)試必須在代碼完成后編寫(xiě); 它不是測(cè)試驅(qū)動(dòng)的開(kāi)發(fā)(從以前的博客中可以看到,我是一個(gè)忠實(shí)的擁護(hù)者),它也不是單元測(cè)試。 在代碼后編寫(xiě)測(cè)試的問(wèn)題之一是必須執(zhí)行測(cè)試的開(kāi)發(fā)人員將其視為瑣事而不是開(kāi)發(fā)的一部分,這意味著它通常很匆忙,而不是在編碼風(fēng)格的整潔中完成的。

您還需要一定數(shù)量的基礎(chǔ)結(jié)構(gòu)才能使用此技術(shù)進(jìn)行編碼,因?yàn)樾枰?shù)據(jù)庫(kù),而數(shù)據(jù)庫(kù)可能會(huì)或可能不在您的本地計(jì)算機(jī)上,因此您可能必須連接到網(wǎng)絡(luò)才能運(yùn)行測(cè)試。 測(cè)試數(shù)據(jù)要么保存在測(cè)試文件中(如本例所示),然后在運(yùn)行測(cè)試時(shí)加載到數(shù)據(jù)庫(kù)中,要么永久保存在數(shù)據(jù)庫(kù)中。 如果需求變更迫使測(cè)試發(fā)生變更,則通常需要將數(shù)據(jù)庫(kù)文件與測(cè)試代碼一起進(jìn)行更新,這迫使您至少在兩個(gè)位置更新測(cè)試。

除了缺乏測(cè)試對(duì)象隔離之外,這種測(cè)試的另一個(gè)大問(wèn)題是它們可能非常慢,有時(shí)要花幾秒鐘來(lái)執(zhí)行。 Shane Warden在他的《敏捷開(kāi)發(fā)的藝術(shù)》一書(shū)中指出,單元測(cè)試的運(yùn)行速度應(yīng)為“每秒數(shù)百”。 沃登還繼續(xù)引用邁克爾·費(fèi)瑟(Michael Feather)的書(shū)《有效地使用舊版代碼》 ,以明確定義什么單元測(cè)試或不可以:

在以下情況下,測(cè)試不是單元測(cè)試:

  • 它與數(shù)據(jù)庫(kù)對(duì)話。
  • 它通過(guò)網(wǎng)絡(luò)進(jìn)行通信。
  • 它涉及文件系統(tǒng)。
  • 您必須對(duì)環(huán)境做一些特殊的事情(例如編輯配置文件)才能運(yùn)行它。
  • …現(xiàn)在我喜歡。

    …盡管我不一定同意第三點(diǎn)。 良好的單元測(cè)試代碼的主要租戶之一是可讀性。 傳遞給被測(cè)對(duì)象的方法參數(shù)有時(shí)會(huì)很大,尤其是在使用XML時(shí)。 在這種情況下,我認(rèn)為支持測(cè)試的可讀性并將這種大小的數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)文件中而不是將其作為私有的靜態(tài)最終String更為實(shí)用,因此在可行的情況下,我只堅(jiān)持第3點(diǎn)。

    可以使用第一個(gè)首字母縮寫(xiě)來(lái)總結(jié)單元測(cè)試:快速,獨(dú)立,可重復(fù),自我驗(yàn)證和及時(shí),而Roy Osherove在他的《單元測(cè)試的藝術(shù)》一書(shū)中總結(jié)了一個(gè)很好的單元測(cè)試:“自動(dòng)代碼調(diào)用方法或類(lèi),然后檢查有關(guān)該方法或類(lèi)的邏輯行為的一些假設(shè)。 單元測(cè)試幾乎總是使用單元測(cè)試框架編寫(xiě)的。 它可以輕松編寫(xiě)并快速運(yùn)行。 它是完全自動(dòng)化的,可信賴的,可讀的和可維護(hù)的”。

    端到端測(cè)試的好處是,他們確實(shí)會(huì)與其他對(duì)象和周?chē)h(huán)境一起測(cè)試您的測(cè)試主題,而這在交付代碼之前確實(shí)是必須要做的。 這意味著完成后,您的代碼應(yīng)包含數(shù)百個(gè)單元測(cè)試,但僅包含數(shù)十個(gè)“端到端”測(cè)試。

    鑒于此,當(dāng)我說(shuō)技術(shù)是“次優(yōu)”時(shí),我的介紹性前提并不嚴(yán)格。 “端到端”測(cè)試沒(méi)有任何問(wèn)題,每個(gè)項(xiàng)目都應(yīng)該有一些測(cè)試以及一些普通的集成測(cè)試,但是這類(lèi)測(cè)試不能替代或稱為單元測(cè)試,通常是這種情況。

    確定了單元測(cè)試的內(nèi)容后,我的下一個(gè)博客將調(diào)查您應(yīng)測(cè)試的內(nèi)容以及原因……

    參考: Captain Debug博客上的 JCG合作伙伴 的“ 端到端測(cè)試的濫用-測(cè)試技術(shù)2”

    相關(guān)文章 :

    • 測(cè)試技巧–不編寫(xiě)測(cè)試
    • 您應(yīng)該對(duì)什么進(jìn)行單元測(cè)試? –測(cè)試技術(shù)3
    • 常規(guī)單元測(cè)試和存根–測(cè)??試技術(shù)4
    • 使用模擬的單元測(cè)試–測(cè)試技術(shù)5
    • 為舊版代碼創(chuàng)建存根–測(cè)試技術(shù)6
    • 有關(guān)為舊版代碼創(chuàng)建存根的更多信息–測(cè)試技術(shù)7
    • 為什么要編寫(xiě)單元測(cè)試–測(cè)試技巧8
    • 一些定義–測(cè)試技術(shù)9
    • 使用FindBugs產(chǎn)生更少的錯(cuò)誤代碼
    • 在云中開(kāi)發(fā)和測(cè)試

    翻譯自: https://www.javacodegeeks.com/2011/11/misuse-of-end-to-end-tests-testing.html

    總結(jié)

    以上是生活随笔為你收集整理的端到端测试的滥用–测试技术2的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。