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

變異測試:基于故障的試驗

開發 測試
基于 .NET 的 xUnit.net 測試框架,開發一款自動貓門的邏輯,讓門在白天開放,夜間鎖定。

[[280217]]

基于 .NET 的 xUnit.net 測試框架,開發一款自動貓門的邏輯,讓門在白天開放,夜間鎖定。

在本系列的第一篇文章中,我演示了如何使用設計的故障來確保代碼中的預期結果。在第二篇文章中,我將繼續開發示例項目:一款自動貓門,該門在白天開放,夜間鎖定。

在此提醒一下,你可以按照此處的說明使用 .NET 的 xUnit.net 測試框架。

關于白天時間

回想一下,測試驅動開發(TDD)圍繞著大量的單元測試。

第一篇文章中實現了滿足 Given7pmReturnNighttime 單元測試期望的邏輯。但還沒有完,現在,你需要描述當前時間大于 7 點時期望發生的結果。這是新的單元測試,稱為 Given7amReturnDaylight

  1. [Fact]
  2. public void Given7amReturnDaylight()
  3. {
  4. var expected = "Daylight";
  5. var actual = dayOrNightUtility.GetDayOrNight();
  6. Assert.Equal(expected, actual);
  7. }

現在,新的單元測試失敗了(越早失敗越好!):

  1. Starting test execution, please wait...
  2. [Xunit.net 00:00:01.23] unittest.UnitTest1.Given7amReturnDaylight [FAIL]
  3. Failed unittest.UnitTest1.Given7amReturnDaylight
  4. [...]

期望接收到字符串值是 Daylight,但實際接收到的值是 Nighttime

分析失敗的測試用例

經過仔細檢查,代碼本身似乎已經出現問題。 事實證明,GetDayOrNight 方法的實現是不可測試的!

看看我們面臨的核心挑戰:

  1. GetDayOrNight 依賴隱藏輸入。

    dayOrNight 的值取決于隱藏輸入(它從內置系統時鐘中獲取一天的時間值)。

  2. GetDayOrNight 包含非確定性行為。

    從系統時鐘中獲取到的時間值是不確定的。(因為)該時間取決于你運行代碼的時間點,而這一點我們認為這是不可預測的。

  3. GetDayOrNight API 的質量差。

    該 API 與具體的數據源(系統 DateTime)緊密耦合。

  4. GetDayOrNight 違反了單一責任原則。

    該方法實現同時使用和處理信息。優良作法是一種方法應負責執行一項職責。

  5. GetDayOrNight 有多個更改原因。

    可以想象內部時間源可能會更改的情況。同樣,很容易想象處理邏輯也將改變。這些變化的不同原因必須相互隔離。

  6. 當(我們)嘗試了解 GetDayOrNight 行為時,會發現它的 API 簽名不足。

    最理想的做法就是通過簡單的查看 API 的簽名,就能了解 API 預期的行為類型。

  7. GetDayOrNight 取決于全局共享可變狀態。

    要不惜一切代價避免共享的可變狀態!

  8. 即使在閱讀源代碼之后,也無法預測 GetDayOrNight 方法的行為。

    這是一個嚴重的問題。通過閱讀源代碼,應該始終非常清晰,系統一旦開始運行,便可以預測出其行為。

失敗背后的原則

每當你遇到工程問題時,建議使用久經考驗的分而治之divide and conquer策略。在這種情況下,遵循關注點分離separation of concerns的原則是一種可行的方法。

關注點分離(SoC)是一種用于將計算機程序分為不同模塊的設計原理,以便每個模塊都可以解決一個關注點。關注點是影響計算機程序代碼的一組信息。關注點可以和要優化代碼的硬件的細節一樣概括,也可以和要實例化的類的名稱一樣具體。完美體現 SoC 的程序稱為模塊化程序。

出處

GetDayOrNight 方法應僅與確定日期和時間值表示白天還是夜晚有關。它不應該與尋找該值的來源有關。該問題應留給調用客戶端。

必須將這個問題留給調用客戶端,以獲取當前時間。這種方法符合另一個有價值的工程原理——控制反轉inversion of control。Martin Fowler 在這里詳細探討了這一概念。

框架的一個重要特征是用戶定義的用于定制框架的方法通常來自于框架本身,而不是從用戶的應用程序代碼調用來的。該框架通常在協調和排序應用程序活動中扮演主程序的角色。控制權的這種反轉使框架有能力充當可擴展的框架。用戶提供的方法為框架中的特定應用程序量身制定泛化算法。

Ralph Johnson and Brian Foote

重構測試用例

因此,代碼需要重構。擺脫對內部時鐘的依賴(DateTime 系統實用程序):

  1. DateTime time = new DateTime();

刪除上述代碼(在你的文件中應該是第 7 行)。通過將輸入參數 DateTime 時間添加到 GetDayOrNight 方法,進一步重構代碼。

這是重構的類 DayOrNightUtility.cs

  1. using System;
  2.  
  3. namespace app {
  4. public class DayOrNightUtility {
  5. public string GetDayOrNight(DateTime time) {
  6. string dayOrNight = "Nighttime";
  7. if(time.Hour >= 7 && time.Hour < 19) {
  8. dayOrNight = "Daylight";
  9. }
  10. return dayOrNight;
  11. }
  12. }
  13. }

重構代碼需要更改單元測試。 需要準備 nightHourdayHour 的測試數據,并將這些值傳到GetDayOrNight 方法中。 以下是重構的單元測試:

  1. using System;
  2. using Xunit;
  3. using app;
  4.  
  5. namespace unittest
  6. {
  7. public class UnitTest1
  8. {
  9. DayOrNightUtility dayOrNightUtility = new DayOrNightUtility();
  10. DateTime nightHour = new DateTime(2019, 08, 03, 19, 00, 00);
  11. DateTime dayHour = new DateTime(2019, 08, 03, 07, 00, 00);
  12.  
  13. [Fact]
  14. public void Given7pmReturnNighttime()
  15. {
  16. var expected = "Nighttime";
  17. var actual = dayOrNightUtility.GetDayOrNight(nightHour);
  18. Assert.Equal(expected, actual);
  19. }
  20.  
  21. [Fact]
  22. public void Given7amReturnDaylight()
  23. {
  24. var expected = "Daylight";
  25. var actual = dayOrNightUtility.GetDayOrNight(dayHour);
  26. Assert.Equal(expected, actual);
  27. }
  28.  
  29. }
  30. }

經驗教訓

在繼續開發這種簡單的場景之前,請先回顧復習一下本次練習中所學到的東西。

運行無法測試的代碼,很容易在不經意間制造陷阱。從表面上看,這樣的代碼似乎可以正常工作。但是,遵循測試驅動開發(TDD)的實踐(首先描述期望結果,然后才描述實現),暴露了代碼中的嚴重問題。

這表明 TDD 是確保代碼不會太凌亂的理想方法。TDD 指出了一些問題區域,例如缺乏單一責任和存在隱藏輸入。此外,TDD 有助于刪除不確定性代碼,并用行為明確的完全可測試代碼替換它。

最后,TDD 幫助交付易于閱讀、邏輯易于遵循的代碼。 

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

2019-10-21 09:52:51

變異測試單元測試

2021-08-26 05:57:42

Web 安全防火墻安全工具

2011-01-10 13:24:17

2016-12-05 09:50:17

2018-08-30 14:58:12

機器學習磁盤故障

2015-09-22 16:13:50

2011-08-23 14:02:17

2011-05-16 14:13:04

模型測試

2011-07-04 18:12:09

功能測試故障模型

2010-09-01 10:57:18

vSphere服務器虛擬化VMware

2010-11-04 13:46:33

GPON網絡測試華為

2009-09-15 16:50:54

2016-03-28 16:46:36

城市軌道LTE-M解決華為

2009-07-07 17:22:34

光纖鏈路測試故障

2020-11-06 15:05:13

物聯網預測性維護安全

2010-12-28 20:14:53

2009-02-09 14:04:01

2014-07-07 17:19:38

敏捷網絡華為

2012-11-27 16:41:42

2014-02-10 09:17:50

光纜線路故障
點贊
收藏

51CTO技術棧公眾號

精品久久久久久久久久久院品网| 久久精品国产亚洲a∨麻豆| 欧洲在线视频| 免费在线观看不卡| 黄色成人在线播放| 成人黄色av网站| 久久久久亚洲av成人无码电影| 亚洲国产成人一区二区| 99国产精品免费视频观看| 一本一本久久a久久精品综合麻豆| 成人3d动漫一区二区三区91| www成人啪啪18软件| 综合日韩av| 91在线免费视频观看| 国产69精品久久久久9999| 美女又黄又免费的视频| а√中文在线8| 国产乱码精品一区二区三| www.久久久久| 激情文学亚洲色图| 在线日本中文字幕| 日本不卡的三区四区五区| 亚洲欧洲xxxx| 超碰在线97免费| h视频在线观看免费| 日韩激情一区二区| 中文字幕免费国产精品| 天天干天天爽天天射| 国产综合视频一区二区三区免费| 国产一区二区三区四区五区美女 | 无套内谢大学处破女www小说| 午夜伦理在线视频| 成人免费观看男女羞羞视频| 午夜精品国产精品大乳美女| 国产福利在线观看视频| 亚洲天堂av影院| 成人黄色在线视频| 91超碰caoporn97人人| 一区二区黄色片| 精品自拍视频| 亚洲精品视频自拍| 国产免费一区二区三区| aaa人片在线| 欧美丝袜激情| 51精品视频一区二区三区| 美女在线免费视频| 人成网站在线观看| 天堂一区二区在线| 久久精品中文字幕免费mv| 91精品国产高清91久久久久久| 不卡专区在线| 国产日产欧美一区二区三区| 成人免费看吃奶视频网站| 国产成人a v| 欧美日韩国产高清| 亚洲人成绝费网站色www| 国产老熟女伦老熟妇露脸| japanese色系久久精品| 欧美香蕉大胸在线视频观看| 三区精品视频| 风流老熟女一区二区三区| 久久亚洲国产精品一区二区| 日本午夜精品理论片a级appf发布| 亚洲AV成人无码精电影在线| 久久a级毛片毛片免费观看| 日本道免费精品一区二区三区| 欧美与动交zoz0z| 粗大黑人巨茎大战欧美成人| 一区二区三区四区亚洲| 欧美尤物一区| 亚洲av无码一区二区三区dv| 国产成人超碰人人澡人人澡| 国产精品极品美女粉嫩高清在线| 九九在线观看视频| 日本一区二区在线看| 亚洲黄色片网站| 亚洲第一区第二区第三区| 中文字幕在线中文字幕在线中三区| 欧美日韩美女在线| 日本人妻伦在线中文字幕| 成人动漫在线免费观看| 国产精品久久久一区麻豆最新章节| 国产精品一级久久久| 一区二区三区精彩视频| 噜噜噜躁狠狠躁狠狠精品视频| 欧美成人免费全部| 国产高清视频免费在线观看| 欧美私人啪啪vps| 欧美在线观看视频| 国产一级视频在线| 国产精品99视频| 欧美激情综合亚洲一二区| 婷婷激情四射网| 色天天久久综合婷婷女18| 欧美成人免费一级人片100| 日韩精品在线不卡| 最新亚洲视频| 久久免费视频在线观看| 日韩精品一区二区亚洲av| 亚洲美女视频在线免费观看| 欧美激情一区二区久久久| 草久久免费视频| 久久99精品久久只有精品| 国产精品第一页在线| 精品毛片在线观看| 国产精品一区二区三区四区| 久久riav二区三区| 深夜福利免费在线观看| 波多野洁衣一区| 亚洲精品高清视频| 日本美女在线中文版| 国产日韩av一区| 可以看毛片的网址| yellow在线观看网址| 欧美美女bb生活片| 久久久久久久高清| 国产日产一区| 伊人久久大香线蕉av一区二区| 中文字幕国产专区| 黄色精品一区| 97在线精品国自产拍中文| 国产又黄又粗又长| 国产福利一区在线| 成人精品一二区| 午夜精品久久久久久久99老熟妇 | 一区二区三区免费在线观看视频| 婷婷丁香综合| 国产精品综合网站| 91资源在线视频| 国产女同互慰高潮91漫画| 亚洲电影免费| 澳门av一区二区三区| 欧美亚洲一区二区在线| 污视频网址在线观看| 欧美三级一区| 亚洲国产精品高清久久久| 国产麻豆天美果冻无码视频| 欧美日韩国产免费观看| 亚洲一区二区三区视频播放| 懂色av蜜臀av粉嫩av分享吧| 日韩美女视频一区| 久久久久久www| 你懂得影院夜精品a| 亚洲精品国产成人| 国产成人愉拍精品久久 | 国内外成人免费激情在线视频 | 国产自产视频一区二区三区| 亚洲视频电影| 18加网站在线| 色哟哟欧美精品| 日韩av在线看免费观看| 西西裸体人体做爰大胆久久久| 国产精品视频在线观看| 成人av一区| 欧美日产在线观看| 国产精品入口麻豆| 欧美成人自拍| 午夜精品理论片| av女名字大全列表| 亚洲欧美福利一区二区| 亚洲第一色av| 国产精品红桃| 久久久久久久免费| jizz欧美| 日韩精品免费一线在线观看| 福利视频第一页| 国产精品一国产精品k频道56| 国产主播精品在线| 头脑特工队2在线播放| 亚洲激情图片一区| 久久久久久久人妻无码中文字幕爆| 青青草原国产在线| 精品国产免费无码久久久| 国产乱码一区二区三区| 日本五级黄色片| 亚州av一区| 少妇久久久久久| 日韩毛片一区二区三区| 国产.欧美.日韩| 男人的天堂99| 国产毛片久久久| 欧美日本亚洲视频| 曰批又黄又爽免费视频| 91小视频在线| 亚洲色图都市激情| 日韩色性视频| 国产亚洲视频在线观看| 国产一级做a爱片久久毛片a| 国产亚洲成年网址在线观看| 免费在线观看污网站| 亚洲激情女人| 视频一区三区| 激情小说亚洲图片| 国产日韩在线亚洲字幕中文| 操喷在线视频| 精品国产凹凸成av人导航| 成人在线观看免费完整| 91丨九色丨黑人外教| 毛片毛片毛片毛| 国产欧美一级| 黄色污污在线观看| 国产亚洲精品美女久久久久久久久久| 亚洲一区二区三区香蕉| 久久r热视频| 九九热精品在线| 国产露出视频在线观看| 欧美午夜片在线免费观看| 小早川怜子一区二区的演员表| 99re热这里只有精品免费视频| 欧美一级特黄aaa| 视频精品一区二区| 日韩国产欧美亚洲| 香蕉久久99| 亚洲综合国产精品| 日本精品网站| 视频在线一区二区| 亚洲欧美综合在线观看| 91精品久久久久久蜜臀| 国产精品第六页| 色综合天天综合网天天看片| 精品深夜av无码一区二区老年| 不卡视频一二三四| 精品人妻一区二区三| 狠色狠色综合久久| 一区二区国产日产| 精品一区二区三区在线| 成人福利视频在线观看| 99久久久国产精品免费调教网站| 欧美在线激情网| 色多多视频在线观看| 国产亚洲在线播放| 久青草国产在线| 欧美精品乱码久久久久久按摩| 精品国产一区二区三区四| 激情成人在线视频| 欧美成人aaaaⅴ片在线看| 亚洲一区影音先锋| 日本一区二区三区网站| 国产999精品久久久久久| 手机看片国产精品| 国产精品一区二区在线观看网站| 五月天国产视频| 国产美女视频一区| 图片区乱熟图片区亚洲| 久久精品国产久精国产爱| 久久男人资源站| 艳女tv在线观看国产一区| 精品一区二区三区国产| 成人在线免费| 国产精品一香蕉国产线看观看 | 精品国产乱码| 深夜福利成人| 国产精品精品| 国产一二三四区在线观看| 欧美高清一区| 日韩在线电影一区| 成人盗摄视频| 国产日韩在线一区二区三区| 久久99国产精品久久99大师| 九九九久久久| 精品精品久久| 日本成人性视频| 深爱激情久久| 国产精品一区在线观看| 欧美尿孔扩张虐视频| 亚洲free性xxxx护士白浆| 日韩中文字幕在线一区| 国产精品美女久久久久久免费| yellow在线观看网址| 欧美最猛黑人xxxx黑人猛叫黄| 免费成人美女女| 91高清在线免费观看| 欧美91看片特黄aaaa| 成人国产精品久久久久久亚洲| 视频精品一区二区三区| 久久伦理网站| 99久久夜色精品国产亚洲96| 隔壁人妻偷人bd中字| 美女网站久久| 日本一二三区在线| 久久香蕉国产线看观看99| 在线观看免费视频国产| 久久亚洲欧美国产精品乐播| а天堂中文在线资源| 午夜精品视频在线观看| 欧美日韩在线视频免费播放| 国产精品成人免费| 国产免费嫩草影院| 亚洲午夜一区二区三区| 国产裸体美女永久免费无遮挡| 黑人精品xxx一区一二区| 伊人久久亚洲综合| 欧美午夜精品免费| 精品国产18久久久久久| 欧美另类久久久品| 无码精品人妻一区二区| 日韩网站免费观看高清| 草草在线视频| 亚洲free嫩bbb| 精品少妇av| 男人日女人逼逼| 国产精品三上| 中文字幕剧情在线观看| 久久久不卡网国产精品二区| 无码人妻精品一区二区中文| 一区二区高清免费观看影视大全 | 欧美激情日韩| 中文字幕国产传媒| 91在线码无精品| 九九九免费视频| 欧美剧情片在线观看| 狠狠色伊人亚洲综合网站l| 欧美极品少妇xxxxⅹ喷水| 欧美亚洲二区| 日韩精品国内| 校园春色综合网| 久久久高清视频| 一区二区三区欧美日| 自拍偷拍精品视频| 亚洲精品视频二区| 免费人成在线观看网站| 欧美精品电影免费在线观看| 激情不卡一区二区三区视频在线| 日韩一区免费观看| 石原莉奈在线亚洲二区| 亚洲综合自拍网| 亚洲国产日日夜夜| 久久国产黄色片| 亚洲国产另类 国产精品国产免费| а√天堂官网中文在线| 国产主播欧美精品| 91麻豆国产自产在线观看亚洲| 亚洲福利精品视频| 国产精品99久久久| 国产精品夜夜夜爽阿娇| 欧美日韩一区久久| 成人午夜免费福利| 欧美精品成人在线| 精品女人视频| 九一国产精品视频| 99精品视频一区二区| 国产成人自拍视频在线| 亚洲成人久久一区| 国产盗摄——sm在线视频| yy111111少妇影院日韩夜片 | 国产三级一区二区| 国产又粗又猛又黄视频| 91精品国产综合久久久蜜臀图片| 95在线视频| 国产在线a不卡| 91精品国产自产在线观看永久∴ | 日韩一级在线观看| 神马午夜电影一区二区三区在线观看| 亚洲午夜精品视频| 99久久er| 久久久成人精品一区二区三区| 国产美女精品人人做人人爽| 激情五月婷婷在线| 亚洲精品乱码久久久久久金桔影视| 天堂√中文最新版在线| 日韩欧美亚洲在线| 国内精品在线播放| 永久免费成人代码| 精品视频在线看| 黄网址在线观看| 国产精品9999| 麻豆成人入口| 无码人妻丰满熟妇区毛片18| 欧美国产日产图区| 国产精品美女久久久久av爽| 亚洲视频国产视频| 亚洲男女网站| 日韩中文不卡| 国内成人精品2018免费看| 久久久久久福利| 亚洲欧美在线播放| av成人 com a| 99热在线国产| 男人的天堂亚洲| 97成人资源站| 欧美肥胖老妇做爰| 国产盗摄精品一区二区酒店| 美女视频久久| 99国产精品久久久久久久成人热| 中文字幕国产综合| 欧美一级夜夜爽| 欧美午夜电影一区二区三区| 国产成+人+综合+亚洲欧美丁香花| 日韩理论片av| yjizz视频| 欧美浪妇xxxx高跟鞋交| 日韩激情电影免费看| 国模精品一区二区三区| 欧美aaaaa成人免费观看视频| 久久综合综合久久| 中文字幕日韩精品在线观看| youjizz欧美| 日本中文字幕二区| 欧美天堂在线观看| 91福利国产在线观看菠萝蜜|