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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

《Unit Testing》2.1 经典学派如何做测试隔离

發布時間:2023/12/4 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《Unit Testing》2.1 经典学派如何做测试隔离 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

經典學派如何解決隔離問題

首先,再回顧一下單元測試的三個重要特性:

  • 驗證一小段代碼(或者叫一個單元)

  • 執行速度快

  • 使用隔離的方式進行

?

針對第一個特性就會引出一個問題:多小的一段代碼才足夠小?

  • 如果你采用針對每個類進行隔離的話,那么這一小段代碼肯定就是這個類了,或者類里面的一個方法。沒法比這個范圍更大了。

  • 有些情況下,你可能需要同時測試好幾個類。但大部分時候,你都應該盡量保證每次只測試一個類。

?

但是在經典學派的做法里,并不是被測試的代碼需要隔離,而是單元測試之間需要互相隔離。這樣的話,你可以并行、按順序或按任意順序進行單元測試。而且它們的結果不會受到影響。

?

讓測試之間互相隔離意味著可以同時運行多個類,前提是它們都在內存里并且不會接觸到共享的狀態。

  • 共享狀態就是指測試之間可以通信,并且會影響相互的執行上下文。

    • 典型的共享狀態例子就是進程外依賴:數據庫、文件系統等等。

?

共享、私有、進程外依賴

共享依賴是指:這種依賴在測試間被共享,并且能夠提供影響相互結果的手段。

  • 典型的例子就是靜態可變字段

  • 另一個例子就是數據庫

?

私有依賴就是指不共享的依賴。

?

進程外依賴,這種依賴運行于程序執行進程以外。它是到暫時還未進入內存的數據的代理。

在大多數情況下,進程外依賴就是共享依賴,但也不全是。例如:

  • 數據庫既是共享依賴,又是進程外依賴。

  • 但如果每次運行測試都啟動一個內涵數據庫的 docker 容器,那這是進程外依賴,而不是共享依賴。因為測試運行的不是同一個進程實例。

  • 同理,只讀數據庫也是進程外依賴,但不是共享依賴。因為其數據不可變,所有測試間的結果不會互相影響。

?

針對隔離問題,經典學派對于 mock 和測試替身的使用,擁有更加溫和的觀點:你仍然可以使用它們,但通常只對那些在測試之間引入共享狀態的依賴項這樣做:

?

強調一下:共享依賴是指在單元測試間共享的依賴,而不是被測試類(單元)的依賴。

?

共享依賴與不穩定依賴

另一個意思相近,但不完全一樣的術語就是不穩定依賴(volatile dependencies

不穩定依賴具有以下屬性:

  • 除了默認安裝在開發人員的機器上之外,它還引入了設置和配置運行時環境的要求。數據庫和API服務就是很好的例子。它們需要額外的設置,默認情況下不會安裝在組織中的計算機上。

  • 它包含不確定性行為。例如,隨機數生成器或返回當前日期和時間的類。這些依賴關系是不確定的,因為它們在每次調用上提供不同的結果。

?

不穩定依賴與共享依賴在概念上多少還是有一些重疊的。例如:

  • 數據庫既是共享依賴,又是不穩定依賴。

  • 而文件系統則不是,因為每個開發者電腦上都有文件系統。

  • 隨機數生成器是不穩定依賴,但它確不是共享的,因為每次測試都會運行它的一個實例。

?

替換掉共享依賴的另一個原因就是提升測試的速度。

因為共享依賴大多數都在程序執行進程之外,所以例如訪問數據庫就要比訪問私有依賴慢得多。

?

經典學派對隔離的這種觀點也導致了對單元(一小段代碼)的不同理解。一個單元不一定要局限于一個類。你也可以對一組類進行單元測試,只要它們都不是共享依賴項。

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的《Unit Testing》2.1 经典学派如何做测试隔离的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。