精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

ZOMBIES:軟件開發和測試中的構建與拓展(二)

開發
在開發初期只對單個元素進行編碼和測試,之后再拓展到多個元素上。

在 上一篇文章 中我已經解釋了為什么把所有編程問題當作一群喪尸一次性處理是錯誤的。我也解釋了 ZOMBIES 方法中的第一條:最簡場景。本文中我將進一步介紹接下來的兩條:單元素場景和多元素場景。

ZOMBIES 表示以下首字母縮寫:

  • Z – 最簡場景(Zero)
  • O – 單元素場景(One)
  • M – 多元素場景(Many or more complex)
  • B – 邊界行為(Boundary behaviors)
  • I – 接口定義(Interface definition)
  • E – 處理特殊行為(Exercise exceptional behavior)
  • S – 簡單場景用簡單的解決方案(Simple scenarios, simple solutions)

在上一篇文章中,通過應用了最簡場景,你在代碼里構建了一條最簡可行通路。這個代碼里沒有任何業務處理邏輯。現在是時候向系統中添加一個元素了。

最簡場景表示系統中什么也沒有,這是一個空的用例,我們什么也不用關心。單元素場景代表我們有一個元素需要關心考慮。這個單一元素可能是集合中的一個元素、一個訪問著或者一個需要處理的事件。

對于多元素場景,我們需要處理更復雜的情況,比如兩個或更多的集合元素或事件。

單元素場景

在上一篇文章的代碼基礎上,向虛擬購物筐里添加一些商品。首先,寫一個偽測試:

[Fact]
public void Add1ItemBasketHas1Item() {
        var expectedNoOfItems = 1;
        var actualNoOfItems = 0;
        Assert.Equal(expectedNoOfItems, actualNoOfItems);
}

不出所料,這個測試失敗了,因為硬編碼了一個錯誤的值:

Starting test execution, please wait...
A total of 1 test files matched the specified pattern.
[xUnit.net 00:00:00.57] tests.UnitTest1.NewlyCreatedBasketHas0Items [FAIL]
  X tests.UnitTest1.NewlyCreatedBasketHas0Items [4ms]
  Error Message:
   Assert.Equal() Failure
Expected: 0
Actual: 1
[...]

現在是時候停止偽造了。現在你已經用 ArrayList 實現了購物筐。那么應該怎么實現商品呢?

簡潔性應該一直是你的指導原則。在不了解商品的太多信息的情況下,你可以先用另一個集合來實現它。這個表示商品的集合應該包含些什么呢?由于你多半會關心計算購物筐中的商品總價,所以對商品的表示至少需要包含價格(可以是任意貨幣,為簡單起見,不妨假設是人民幣)。

(我們需要)一個簡單的集合類型,它包含一個商品 ID(可以在系統中的其它地方使用 ID 來指向該商品)和這個商品的價格。

鍵值對類型的數據結構可以很容易滿足這個需求。在 C# 中最先被想到的數據結構就是 Hashtable

在購物應用的代碼中給 IShoppingAPI 增加一個新功能:

int AddItem(Hashtable item);

這個新功能以一個用 Hashtable 表示的商品為輸入,返回購物筐中的商品數量。

將測試代碼中硬編碼的值提替換為對接口的調用:

[Fact]
public void Add1ItemBasketHas1Item() {            
    var expectedNoOfItems = 1;
    Hashtable item = [new][3] Hashtable();
    var actualNoOfItems = shoppingAPI.AddItem(item);
    Assert.Equal(expectedNoOfItems, actualNoOfItems);
}

在上面的代碼中實例化了一個 Hashtable 并命名為 item,然后調用購物接口中的 AddItem(item) 方法,該方法會返回購物筐中實際的商品數量。

轉到 ShoppingAPI 類中,實現這個方法:

public int AddItem(Hashtable item) {
    return 0;
}

這里再次通過寫假代碼來檢驗測試的效果(測試是業務代碼的第一個調用者)。如果測試失敗,將硬編碼值換成實際的代碼:

public int AddItem(Hashtable item) {
    basket.Add(item);
    return basket.Count;
}

在上面的代碼中,向購物筐里添加了一件商品,然后返回購物筐中的商品數量:

Test Run Successful.
Total tests: 2
     Passed: 2
 Total time: 1.0633 Seconds

到目前為止,你通過了兩個測試,同時也基本里解了 ZOMBIES 方法中的最簡場景和單元素場景兩部分。

反思總結

回顧前面所做的工作,你會發現通過將注意力集中到處理最簡場景和單元素場景上,你在構建接口的同時也定義了一些業務邏輯邊界!這不是很棒嗎?現在你已經部分地實現了最關鍵的抽象邏輯,并且能夠處理什么也沒有和只有一個元素的的情況。因為你正在構建的是一個電子交易 API,所以你不能對顧客的購物行為預設其它限制。總而言之,虛擬購物筐應該是無限大的。

ZOMBIES 提供的逐步優化思路的另一個重要方面(雖然不是很明顯)是從大概思路到具體實現的阻力。你也許已經注意到了,要具體實現某個東西總是困難重重。倒不如先用硬編碼值來構造一個偽實現。只有看到接口與測試之間以一種合理的方式交互之后,你才會愿意開始完善實現代碼。

即便如此,你也應該采用簡單直接的代碼結構,盡可能避免條件邏輯分支。

多元素場景

通過定義顧客向購物筐里添加兩件商品時的期望來拓展應用程序。首先構造一個偽測試。它的期望值為 2,但是現在將實際值硬編碼為 0,強制讓測試失敗:

[Fact]
public void Add2ItemsBasketHas2Items() {
        var expectedNoOfItems = 2;
        var actualNoOfItems = 0;
        Assert.Equal(expectedNoOfItems, actualNoOfItems);
}

執行測試,前兩個測試用例通過了(針對最簡場景和單元素場景的測試),而硬編碼的測試不出所料地失敗了:

A total of 1 test files matched the specified pattern.
[xUnit.net 00:00:00.57] tests.UnitTest1.Add2ItemsBasketHas2Items [FAIL]
  X tests.UnitTest1.Add2ItemsBasketHas2Items [2ms]
  Error Message:
   Assert.Equal() Failure
Expected: 2
Actual: 0

Test Run Failed.
Tatal tests: 3
     Passed: 2
     Failed: 1

將硬編碼值替換為實際的代碼調用:

[Fact]
public void Add2ItemsBasketHas2Items() {
        var expectedNoOfItems = 2;
        Hashtable item = [new][3] Hashtable();
        shoppingAPI.AddItem(item);
        var actualNoOfItems = shoppingAPI.AddItem(item);
        Assert.Equal(expectedNoOfItems, actualNoOfItems);
}

在這個測試中,你向購物筐中添加了兩件商品(實際上是將同一件商品添加了兩次),然后比較期望的商品數量和第二次添加商品后調用 shoppingAPI 返回的商品數量是否相等。

現在所有測試都能夠通過!

敬請期待

現在你已經了解了最簡場景、單元素場景和多元素場景。我將下一篇文章中介紹邊界行為和接口定義。敬請期待!

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2023-05-13 17:38:03

ZOMBIES軟件開發

2023-05-30 18:19:23

ZOMBIES開發軟件

2023-05-30 18:26:49

ZOMBIES軟件開發

2023-02-09 16:48:12

軟件開發測試結對測試

2011-05-12 11:28:40

軟件開發

2023-01-09 16:08:19

2018-01-09 18:33:24

軟件開發測試軟件測試

2024-04-02 06:03:00

GenAI軟件開發人工智能

2009-06-12 11:35:28

模式框架軟件設計

2016-09-28 19:26:31

2023-06-09 19:01:03

軟件開發

2011-08-11 09:56:50

模式

2024-07-23 08:06:19

緩存技術策略

2022-08-26 08:18:04

軟件開發高級系統設計低級系統設計

2016-12-26 18:16:20

軟件開發云華為企業云華為

2011-12-26 15:19:20

聚合

2023-06-08 16:47:09

軟件開發工具

2014-03-21 09:30:26

軟件開發碼農

2013-02-18 09:54:05

軟件開發程序員

2014-01-16 14:06:18

軟件開發團隊管理
點贊
收藏

51CTO技術棧公眾號

91av视频导航| 欧美不卡一区二区三区| 婷婷精品国产一区二区三区日韩 | 天堂网在线资源| 国产一区导航| 色噜噜狠狠色综合网图区| 性感美女一区二区三区| 日韩av福利| 亚洲日本在线看| 久久久精品动漫| 国产又大又粗又硬| 一本一本久久| 久久久国产精品x99av| fc2成人免费视频| 99久久精品一区二区成人| 亚洲欧美激情在线| 日本高清视频一区二区三区| av免费观看网址| 久久亚洲欧美| 久久久久久久久久久人体| 国产毛片欧美毛片久久久| 亚洲一区二区免费在线观看| 在线精品国精品国产尤物884a| 国内精品国产三级国产99| 黄色小视频在线免费观看| 国产精品一区二区在线观看不卡| 欧洲精品毛片网站| 日本熟妇乱子伦xxxx| 凹凸成人精品亚洲精品密奴| 日韩av在线免费观看一区| 91香蕉视频在线观看视频| 91精品影视| 欧美日韩亚洲一区二区三区| av一区二区三区免费观看| 香蕉视频在线播放| 国产日韩欧美在线一区| 精品网站在线看| 内射后入在线观看一区| 国产成人在线网站| 成人网在线观看| 中文字幕乱码中文字幕| 久久亚洲精品伦理| 人妖精品videosex性欧美| 国产精品成人久久| 好吊日精品视频| 久久综合色影院| 黄色一级片一级片| 99精品电影| 最近2019年日本中文免费字幕 | 国产麻豆精品久久| 亚洲激情在线观看视频免费| 精品无码av一区二区三区| 欧一区二区三区| 日韩限制级电影在线观看| 中文av字幕在线观看| 亚洲国产精选| 91麻豆精品91久久久久久清纯| 九色91popny| 日韩和的一区二在线| 色呦呦一区二区三区| 久久网站免费视频| 日韩电影免费观| 色94色欧美sute亚洲线路一ni | 美女一区二区三区| 国产精品香蕉av| 国产精品国产三级国产普通话对白 | 国产www.大片在线| 国产av一区二区三区传媒| 特级特黄刘亦菲aaa级| 欧美亚洲福利| 欧美精品自拍偷拍动漫精品| 亚洲怡红院在线| 欧洲一区在线| 欧美电影免费观看完整版| 成人免费网站在线观看| 欧美片一区二区| 黄色国产精品| 136fldh精品导航福利| 欧美三级一区二区三区| 另类亚洲自拍| 国产热re99久久6国产精品| 国产美女主播在线观看| 高清不卡一区二区在线| 韩国成人一区| 国产高清视频免费最新在线| 日韩一区日韩二区| 亚洲国产精品无码av| 在线精品亚洲欧美日韩国产| 欧美亚洲综合色| 午夜视频在线免费看| 欧美日韩一区二区三区在线电影| 亚洲日本中文字幕免费在线不卡| 18精品爽国产三级网站| 欧美日本三区| 国产成人精品日本亚洲| 国产乱码久久久| 白白色亚洲国产精品| 色播亚洲视频在线观看| 青春草免费在线视频| 色综合天天综合网天天狠天天| 在线不卡一区二区三区| 精品久久对白| 久久精品电影一区二区| 国偷自拍第113页| 久久99精品国产麻豆不卡| 国产女人水真多18毛片18精品| 国产乱视频在线观看| 亚洲图片一区二区| 依人在线免费视频| 日韩av三区| 成年人精品视频| 日韩黄色片网站| 国产aⅴ精品一区二区三区色成熟| 欧美日韩亚洲免费| 秋霞在线午夜| 欧美久久久影院| 性欧美13一14内谢| 亚洲日产国产精品| 亚洲最大福利视频网| www.黄在线观看| 午夜久久久久久久久| www.日本久久| 成人情趣视频网站| 日本一区二区不卡| 天天操天天干天天干| 亚洲欧美韩国综合色| 毛葺葺老太做受视频| 日韩av中文字幕一区| 欧美成人性生活| 亚洲影视一区二区| 国产网红主播福利一区二区| 日韩av一二三四区| 精品国产午夜肉伦伦影院| 欧美日本高清视频| 国产乱码一区二区| 亚洲视频网在线直播| 久久国产激情视频| 精品久久成人| 国产精品18久久久久久麻辣| 同心难改在线观看| 日韩欧美大尺度| 国产精品无码网站| 亚洲女同同性videoxma| 国产一区喷水| √天堂8资源中文在线| 日韩欧美激情在线| 中文字幕影音先锋| 国产成人在线视频网址| 国产精品自拍合集| 国产精品毛片久久久| 色综合久久精品亚洲国产| av网站在线观看免费| 亚洲精品中文字幕乱码三区 | 日日嗨av一区二区三区四区| 欧美日韩日本网| 范冰冰一级做a爰片久久毛片| 亚洲精品久久久一区二区三区| 精品无码免费视频| aa级大片欧美| 92看片淫黄大片一级| 一道在线中文一区二区三区| 国产精品扒开腿爽爽爽视频 | 久久久国际精品| 北条麻妃在线视频| 欧美aaaa视频| 97伦理在线四区| av有码在线观看| 亚洲精品视频免费在线观看| 免费av中文字幕| 国产精品久久久久四虎| 性生生活大片免费看视频| 国产大片一区| 成人18视频| 亚洲天堂手机| 综合网中文字幕| 国产精品人人妻人人爽| 亚洲在线视频网站| 久久国产精品无码一级毛片| 日韩高清一区在线| 大桥未久一区二区三区| 成人台湾亚洲精品一区二区| 日本一区二区在线免费播放| 精品美女在线观看视频在线观看| 精品动漫一区二区三区在线观看| 国产成人无码精品| 国产精品你懂的| 色婷婷狠狠18禁久久| 亚洲少妇诱惑| 曰韩不卡视频| 日韩av黄色在线| 91久久国产精品91久久性色| 国产精品高颜值在线观看| 色综合影院在线| 国产综合视频在线| 欧美视频一二三区| 国产精品成人国产乱| 国产精品色婷婷| 黄色激情在线观看| 久久99国产乱子伦精品免费| 给我免费播放片在线观看| 日韩88av| 狠狠色综合网站久久久久久久| 激情久久一区二区| 久久久人成影片一区二区三区| 不卡在线视频| 亚洲国产精品网站| av免费观看网址| 欧美影院精品一区| 日本少妇bbwbbw精品| 综合久久给合久久狠狠狠97色 | 青青草原一区二区| 最新黄网在线观看| 中文字幕日韩电影| 污视频软件在线观看| 日韩一区二区三区免费看| 天堂中文在线网| 亚洲国产视频a| 91ts人妖另类精品系列| 久久久噜噜噜久噜久久综合| 高清中文字幕mv的电影| 国产美女视频91| 国产三级国产精品国产专区50| 夜夜嗨一区二区| 日韩成人三级视频| 伊人久久大香线| 亚洲精品一区二区三| 国内精品久久久久久久久电影网| 国产成人亚洲欧美| 麻豆国产精品| 91精品在线一区| 日本h片久久| 欧美专区在线播放| 1区2区3区在线| 欧美激情在线一区| 欧美人与性动交α欧美精品图片| zzjj国产精品一区二区| 天堂资源在线中文| 中文字幕亚洲专区| 成人在线免费电影| 国产亚洲精品久久久优势| 欧美日本网站| 亚洲欧美日韩精品久久| 韩国免费在线视频| 国产午夜精品视频免费不卡69堂| 欧洲综合视频| 亚洲欧美日韩精品久久亚洲区| 婷婷五月综合久久中文字幕| 亚洲国产高清自拍| 天天干天天摸天天操| 亚洲国产婷婷香蕉久久久久久| 韩国av免费在线| 亚洲第一综合天堂另类专| 黄频网站在线观看| 亚洲成人性视频| 五十路在线观看| 日韩成人av在线播放| 蜜桃免费在线| 在线亚洲欧美视频| 日本中文字幕视频在线| 日韩一区av在线| a在线免费观看| 欧美精品aaa| 成人福利视频| 国产精品入口免费视频一| 偷拍自拍亚洲| 99视频免费观看| 麻豆一区一区三区四区| 欧美日韩精品久久| 久久五月天小说| 在线观看污视频| 日韩午夜一区| 国产真实乱子伦| 麻豆国产精品777777在线| 中文字幕在线视频一区二区三区| 国产风韵犹存在线视精品| 日本国产在线视频| 久久久国产精品午夜一区ai换脸| 久久久免费看片| 亚洲夂夂婷婷色拍ww47 | 91禁在线看| 国产精品18久久久久久首页狼| 日韩毛片网站| 国产传媒一区二区| 精品视频免费在线观看| 免费观看中文字幕| 国产精品资源| 999久久久精品视频| 97国产一区二区| 亚洲女人久久久| 精品久久久久久亚洲精品| 中文无码精品一区二区三区| 欧美va亚洲va在线观看蝴蝶网| 日本v片在线免费观看| 日日狠狠久久偷偷四色综合免费| 免费网站在线观看人| 日本一区二区不卡| 91精品短视频| 亚洲成人第一| 亚洲激情社区| 婷婷丁香激情网| fc2成人免费人成在线观看播放| 三区四区在线观看| 亚洲成人午夜影院| 一级黄色片在线| 亚洲精品一区在线观看香蕉| av理论在线观看| 国产精品免费久久久久影院| 噜噜噜天天躁狠狠躁夜夜精品 | 欧美精选一区二区| 香蕉视频成人在线| 欧美成人精品三级在线观看| www.日韩| 国产欧美在线一区二区| 99re6这里只有精品| 国产亚洲欧美在线视频| 国产乱人伦偷精品视频不卡| 久久久久久国产免费a片| 亚洲国产精品自拍| 国产夫妻性生活视频| 亚洲图片在区色| av中文在线资源库| 高清视频在线观看一区| 亚洲成人99| 国产精品自拍视频在线| 国产亚洲视频系列| 天天综合网入口| 亚洲а∨天堂久久精品9966| 亚洲卡一卡二| 亚洲自拍av在线| 99久久这里只有精品| 午夜免费看视频| 日本一区二区三区四区在线视频| 6080午夜伦理| 日韩精品在线观看视频| av不卡高清| www日韩av| 影音先锋亚洲电影| 国产chinesehd精品露脸| 亚洲欧美日韩国产中文在线| 中文字幕精品一区二| 在线播放日韩av| 日本在线视频一区二区| 日本一区二区三区视频免费看| 亚洲尤物影院| 精品少妇一区二区三区免费观| 天天色天天爱天天射综合| 黄色一级大片在线免费看国产一 | av资源亚洲| 欧美一区二区三区四区夜夜大片 | 色天使久久综合网天天| 亚洲aⅴ乱码精品成人区| 97成人在线视频| 免费视频一区三区| 亚洲人辣妹窥探嘘嘘| 国产精品第13页| 国产农村老头老太视频| 欧美成人精品在线观看| 亚洲不卡视频| www.国产在线视频| 91网上在线视频| 国产午夜无码视频在线观看 | 女人黄色一级片| 欧美日韩在线亚洲一区蜜芽| 欧美日韩在线看片| av激情久久| 免费久久99精品国产自在现线| mm131美女视频| 欧美日韩一区不卡| 怡红院在线观看| 韩国精品一区二区三区六区色诱| 亚洲永久免费| 美国精品一区二区| 日韩欧美一级二级三级久久久| 91破解版在线观看| 青青草久久网络| 国产一区二区三区免费看| 国产极品在线播放| 亚洲精品中文字幕女同| 欧美大片网站| 大荫蒂性生交片| 久久九九影视网| 国产精品一区二区av白丝下载| 久久久久久久久爱| 国产精品日韩精品中文字幕| 在线免费黄色网| 精品国产乱码久久久久久虫虫漫画| 国产香蕉在线| 91成人免费观看| 午夜影院日韩| 亚洲综合网在线| 亚洲偷熟乱区亚洲香蕉av| 久久综合偷偷噜噜噜色| 国产一区二区三区精彩视频| 日韩一区中文字幕| 四虎影视精品成人| 亚洲aⅴ日韩av电影在线观看| 国产欧美丝祙| 国产老头老太做爰视频| 日韩精品极品在线观看| 性欧美video另类hd尤物|