精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

99久久亚洲精品日本无码| 中文字幕免费在线播放| 国产黄色在线观看| 国产a精品视频| 欧美一区二区三区图| 免费人成又黄又爽又色| 欧美成人xxxx| 亚洲午夜精品久久久久久久久| 老牛影视免费一区二区| 在线观看色网站| 精品白丝av| 在线播放日韩专区| 捆绑裸体绳奴bdsm亚洲| 国模私拍国内精品国内av| 亚洲一二三四区| 亚洲欧洲日韩综合二区| 野花视频免费在线观看| 久草免费新视频| 成人精品毛片| 欧美日韩一区在线| 亚洲不卡中文字幕无码| 黄色网页网址在线免费| 久久理论电影网| 97se国产在线视频| 中文字幕日日夜夜| 老司机一区二区三区| 欧美日韩国产成人在线| 三级黄色在线观看| 国产精品一区2区3区| 精品国产乱码久久久久久老虎 | 亚洲v在线观看| 欧美韩国亚洲| 亚洲成人一区二区在线观看| 99精品视频网站| 黄色美女网站在线观看| av亚洲精华国产精华精| av电影成人| 国产丝袜在线视频| 久久99国内精品| 国产精品一区二区久久| 久久久精品毛片| 亚洲一区激情| 欧美性在线视频| 中国一级免费毛片| 亚洲日本视频| 国产做受高潮69| 久久9999久久免费精品国产| 国产精品电影观看| 国产青青在线视频| 国产原创精品视频| 国产精品女同一区二区三区| 麻豆亚洲一区| 午夜黄色小视频| 成人午夜激情视频| 不卡一区二区三区视频| 国产黄色高清视频| 国产精品 日产精品 欧美精品| 国产在线高清精品| 一级做a爱片久久毛片| 99re这里只有精品在线| 亚洲视频福利| 国内精品久久久久伊人av| 91porn在线视频| 亚洲色图插插| 欧美精品激情在线观看| 国产精品成人久久| 中文一区二区| 欧美最近摘花xxxx摘花| 一级成人黄色片| 丝袜亚洲另类欧美| 国产免费成人av| 国产夫妻自拍av| 国产激情一区二区三区桃花岛亚洲| 97超碰人人模人人爽人人看| 亚洲爱情岛论坛永久| 成人av在线一区二区| 久久精品magnetxturnbtih| 男人av在线| 国产精品久久久久婷婷| 国产手机视频在线观看| 丁香高清在线观看完整电影视频| 精品久久久久久电影| 97公开免费视频| 亚洲国产综合在线观看| 精品剧情在线观看| 亚洲永久精品ww.7491进入| 成人影院天天5g天天爽无毒影院| 亚洲色图偷窥自拍| 日韩av手机在线免费观看| 国产精品观看| 国产成人avxxxxx在线看| 91亚洲视频在线观看| 国产成人99久久亚洲综合精品| 国产在线精品一区二区三区| 国产九色在线| 亚洲自拍与偷拍| 好男人www社区| 欧美日韩中出| 亚洲三级av在线| 国产盗摄x88av| 久久精品电影| 97久久人人超碰caoprom欧美| 人人九九精品| 亚洲美女一区二区三区| 青青视频在线播放| 日韩成人精品| 永久免费精品影视网站| 久久黄色免费网站| 蜜臀国产一区二区三区在线播放| 成人xxxxx色| av色图一区| 亚洲电影中文字幕在线观看| 高潮一区二区三区| 九九综合在线| 性欧美xxxx交| 国产欧美熟妇另类久久久| 国产亚洲欧洲一区高清在线观看| 久操手机在线视频| 欧美啪啪网站| 亚洲欧美精品中文字幕在线| 国产一级淫片免费| 国产资源在线一区| 婷婷四月色综合| 日本乱码一区二区三区不卡| 日韩欧美不卡在线观看视频| 妖精视频在线观看免费| 亚久久调教视频| 国产精品久久波多野结衣| 免费大片黄在线观看视频网站| 色噜噜狠狠色综合欧洲selulu| 99久久久无码国产精品性波多| 国产高清久久| 中文久久乱码一区二区| 欧洲成人性视频| 亚洲狼人综合网| 亚洲人成亚洲人成在线观看图片| 亚洲色图久久久| 国产亚洲一区| 日产精品久久久一区二区福利 | 欧美日韩三级在线| 超碰97人人干| 国产日韩欧美高清免费| 国产一区视频观看| 波多野结衣乳巨码无在线观看| 日韩欧美亚洲另类制服综合在线| 亚洲女人久久久| 久久av中文字幕片| 亚洲 欧洲 日韩| 国产精品视频一区视频二区| 久久久国产视频91| 国产精品爽爽久久| 亚洲精品成人天堂一二三| 亚洲色图欧美自拍| 中国精品18videos性欧美| 成人性生交大片免费看视频直播 | 久久偷看各类女兵18女厕嘘嘘| 日本免费精品视频| 国产欧美日产一区| 中文字幕在线综合| 国产精品久久久久久久久久10秀| 91精品久久久久久综合乱菊 | 精品人妻伦一区二区三区久久| 最新国产の精品合集bt伙计| 午夜啪啪小视频| 亚洲欧美偷拍自拍| 国产福利一区二区三区在线观看| 欧美韩日亚洲| 亚洲精品国产精品乱码不99按摩| 国产精品视频久久久久久久| 91尤物视频在线观看| 久久久噜噜噜www成人网| 国产91一区| 成人激情电影一区二区| 污污的网站在线看| 精品无人区太爽高潮在线播放| 成人免费毛片视频| 亚洲欧美区自拍先锋| 无码人妻精品一区二区三| 亚洲欧美日韩国产一区二区| 视频一区视频二区视频三区视频四区国产 | 精品人妻少妇AV无码专区| 亚洲国产精品综合小说图片区| 欧美成人三级伦在线观看| 日韩成人dvd| 国产经典久久久| 日韩最新在线| 成人情趣片在线观看免费| 999福利在线视频| 中文国产亚洲喷潮| 亚洲国产精品成人久久蜜臀| 欧美性xxxxhd| 可以直接看的黄色网址| 91玉足脚交白嫩脚丫在线播放| 久国产精品韩国三级视频| 精品区一区二区| 欧美三级午夜理伦| 激情综合五月| 亚洲性线免费观看视频成熟| 男人揉女人奶房视频60分| 中文字幕av一区二区三区人| 成人网页在线免费观看| 国产白浆在线免费观看| 中文字幕欧美精品在线| www久久久久久| 色狠狠综合天天综合综合| 亚洲女人久久久| 91一区一区三区| 人妻巨大乳一二三区| 美女网站久久| 日韩精品一区在线视频| 天天射天天干天天| 91免费观看在线| 999在线免费视频| 国产综合欧美| 欧洲亚洲一区二区| 一区二区三区高清在线观看| 日韩女在线观看| 川上优av中文字幕一区二区| 久久精品免费播放| www.av在线播放| 日韩经典第一页| 国产美女三级无套内谢| 无码av中文一区二区三区桃花岛| 尤物在线免费视频| 中文av字幕一区| 中文字幕第3页| 国产精品538一区二区在线| 18岁网站在线观看| 狠色狠色综合久久| 超薄肉色丝袜足j调教99| 成人系列视频| 免费精品视频一区| 国偷自产av一区二区三区| 亚洲综合日韩在线| 亚洲三级在线| 国产日韩欧美视频| 神马久久午夜| 韩国美女主播一区| 国产啊啊啊视频在线观看| 久久91超碰青草是什么| caoporn免费在线| 久久精品99国产精品酒店日本 | 国产成人亚洲精品自产在线| 亚洲精品中文在线影院| 免费中文字幕日韩| 亚洲日本丝袜连裤袜办公室| 黄色a级片在线观看| 中文字幕五月欧美| 欧美特黄一级片| 亚洲视频免费看| 男女做暖暖视频| 一区二区三区在线观看动漫| 少妇久久久久久被弄高潮| 自拍偷拍欧美精品| 国产人妻精品一区二区三区不卡| 亚洲色图另类专区| 青青草手机在线视频| 亚洲一区二区三区中文字幕在线| 中文字幕手机在线观看| 亚洲精品中文字幕乱码三区| 久草网站在线观看| 亚洲最新在线观看| 国产精品99无码一区二区| 一区二区欧美国产| 精品无码免费视频| 亚洲在线视频网站| 狠狠躁夜夜躁人人爽天天高潮| 天天亚洲美女在线视频| www毛片com| 欧美色国产精品| 亚洲精品成人无码毛片| 精品亚洲免费视频| 乳色吐息在线观看| 99久久婷婷国产精品综合| 免费观看av网站| 国产精品毛片大码女人| 国产波霸爆乳一区二区| 亚洲第一综合色| 波多野结衣二区三区| 欧美日韩成人综合| 黑人乱码一区二区三区av| 亚洲热线99精品视频| 麻豆网站在线| 91成人福利在线| 日韩免费在线电影| 国产日韩一区欧美| 日韩欧美高清| 黄色大片在线免费看| 蜜臀精品一区二区三区在线观看| 两女双腿交缠激烈磨豆腐| wwww国产精品欧美| 五月天av网站| 欧美午夜无遮挡| 国产精品久久久久久久成人午夜| 亚洲第一福利视频| 午夜视频成人| 欧洲午夜精品久久久| 欧美第一在线视频| 日韩精品一区二区三区四区五区 | 国产色婷婷亚洲99精品小说| 国产少妇在线观看| 日本久久电影网| 亚洲老妇色熟女老太| 这里只有精品久久| 2020日本在线视频中文字幕| 国产精品美女网站| 欧美三级自拍| 日韩不卡视频一区二区| 日韩综合小视频| 男人的天堂影院| 成人欧美一区二区三区在线播放| 天天操天天摸天天干| 欧美一区二区三区四区高清| 成年在线观看免费人视频| 久久久视频在线| 精品欧美视频| 一区二区精品国产| 麻豆久久精品| 理论片大全免费理伦片| 亚洲免费在线视频一区 二区| 欧美日韩a v| 亚洲精品720p| 免费在线观看av电影| 91久久夜色精品国产网站| 国产麻豆精品久久| 中国丰满人妻videoshd| 懂色一区二区三区免费观看| 一区二区三区影视| 欧美日韩亚洲综合| 都市激情一区| 国产精品69精品一区二区三区| 色婷婷狠狠五月综合天色拍| 国产中文字幕乱人伦在线观看| 国产精品自在在线| 91久久国产综合| 制服丝袜av成人在线看| xxxxx日韩| 国产精品久久久久久久久久久新郎 | 丝袜国产日韩另类美女| 国产中文字幕一区二区| 午夜电影久久久| 婷婷视频在线观看| 97久久久免费福利网址| 国产精品视频一区二区高潮| 欧美色女视频| 中文字幕成人在线视频| 国产精品久久夜| 亚洲无码精品在线观看| www.xxxx欧美| 高清在线一区二区| 992tv成人免费观看| 国产精品91一区二区| 欧美日韩中文字幕在线观看| 日韩欧美的一区| h片在线观看| 久久综合九色欧美狠狠| 久久精品主播| 天堂av网手机版| 91精品在线一区二区| 婷婷丁香在线| 精品欧美一区二区久久久伦| 香蕉亚洲视频| 欧美xxxx精品| 欧美一区二区三区四区视频 | 91精品国产91久久久久久黑人| 三日本三级少妇三级99| 亚洲一区二区三区四区五区黄 | vam成人资源在线观看| 国产一级大片免费看| 成人av网址在线观看| 亚洲欧美偷拍视频| 日韩中文在线观看| 97超碰成人| 久久黄色免费看| 亚洲精品久久久蜜桃| 三级在线观看| 国产剧情久久久久久| 欧美黄色一级视频| 91精品国产自产| 欧美日韩不卡一区二区| tube8在线hd| 日韩精品一区二区三区色偷偷| 国产一区二区按摩在线观看| 影音先锋亚洲天堂| 日韩视频永久免费观看| 乱中年女人伦av一区二区| 国产免费999| 亚洲一区中文日韩| 国产h视频在线观看| 不卡一区二区三区视频| 日韩国产在线一| 青青草偷拍视频| 曰本色欧美视频在线| 综合中文字幕| 91日韩视频在线观看| 香蕉加勒比综合久久| 黄色片免费在线观看| 欧美性色黄大片人与善| 国产成人精品三级麻豆| 波多野结衣视频在线看|