有風險的測試

6 有風險的測試

無用測試

什麼叫無用測試呢?未進行任何斷言的測試方法,就叫做無用測試。本來PHPUnit不會對這些測試進行限制,但是可以使用開啓一些配置,將這些測試方法標記爲有風險的。

  • 命令行參數:--report-useless-tests
  • PHPUnit的XML配置文件中設置:beStrictAboutTestsThatDoNotTestAnything="true"

意外的代碼覆蓋

@covers@uses

在測試代碼中用 @covers 標註來指明測試方法想要對哪些方法進行測試

標註方法暫時不在這一章裏面詳細介紹。

@uses 標註用來指明那些將會在測試中執行到但同時又不打算讓其被測試所覆蓋的代碼。

這裏實在沒有找到對應的例子,可能是因爲我半路跳過去的吧。所以以下就是我的猜想了,@uses應該是標註了該測試中會用到的類,但是後面那句**“但同時又不打算讓其被測試所覆蓋的代碼”,我就不知道怎麼理解"覆蓋"**,這個詞的含義了,所以先空着吧。

PHPUnit 可以更嚴格對待意外的代碼覆蓋。此項檢查可以用命令行選項 --strict-coverage 或在 PHPUnit 的 XML 配置文件中設置 beStrictAboutCoversAnnotation="true" 來啓用。

在啓用本項檢查後,如果某個帶有 @covers 標註的測試執行了未在 @covers 或 @uses 標註中列出的代碼,它將被標記爲有風險。

測試執行期間產生的輸出

PHPUnit 可以更嚴格對待測試執行期間產生的輸出。 此項檢查可以用命令行選項 --disallow-test-output 或在 PHPUnit 的 XML 配置文件中設置 beStrictAboutOutputDuringTests="true" 來啓用。

簡單來說就是不允許在測試執行期間有任何的輸出(printecho等),否則就會標記爲有風險。

測試執行時長的超時限制

如果安裝了 PHP_Invoker 包並且 pcntl 擴展可用,那麼可以對測試的執行時長進行限制。此時間限制可以用命令行選項 --enforce-time-limit 或在 PHPUnit 的 XML 配置文件中設置 beStrictAboutTestSize="true" 來啓用。

帶有 @large 標註的測試如果執行時間超過60秒將視爲失敗。此超時限制可以通過XML配置文件中的 timeoutForLargeTests 屬性進行配置。

帶有 @medium 標註的測試如果執行時間超過10秒將視爲失敗。此超時限制可以通過XML配置文件中的 timeoutForMediumTests 屬性進行配置。

沒有 @medium@large 標註的測試都將視同爲帶有 @small``標註,這類測試如果執行時間超過1秒將視爲失敗。此超時限制可以通過XML配置文件中的 ``timeoutForSmallTests屬性進行配置。

上面的話總結起來就是:

  1. 需要安裝PHP_Invokerpcntl拓展
  2. 可以使用命令行參數--enforce-time-limit或者XML配置文件參數beStrictAboutTestSize="true開啓
  3. @large參數默認60秒,可以通過timeoutForLargeTests來修改
  4. @medium參數默認10秒,可以通過timeoutForMediumTests修改
  5. @small是默認配置,默認1秒,可以通過timeoutForSmallTests修改

全局狀態篡改

PHPUnit 可以更嚴格對待篡改全局狀態的測試。此項檢查可以用命令行選項 --strict-global-state 或在 PHPUnit 的 XML 配置文件中設置 beStrictAboutChangesToGlobalState="true" 來啓用。

簡單來說開啓這個配置之後,如果測試類中有篡改全局狀態的代碼,就會被認定爲有風險的代碼。至於全局狀態,估計是$GLOBAL之類的值吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章