我不確定這是否可能,或者是否有更好的架構。我寫了一個函式來做一些測驗:
fun validate(a: Any?, b: Any?){
a shouldBe b
}
我的功能顯然比這更復雜,但現在我想測驗測驗本身。例如,我想通過a=1并b=null確保它失敗。有沒有辦法測驗它失敗或成功使用Kotest?
如果不是,那么構建它的正確方法是什么?
我試圖在我服務的許多地方經常依賴這個測驗,所以我希望它盡可能可靠。
uj5u.com熱心網友回復:
簡短的回答:使用shouldFail { ... }.
這是可能的,因為在 Kotest(和許多其他框架)中失敗的測驗會拋出一個AssertionError. 您可以檢查該例外以查看測驗是否失敗。因此,要檢查失敗的斷言,您可以撰寫:
shouldThrow<AssertionError> { /* your failing test here */ }
正如您可能期望shouldThrow的那樣,它將捕獲例外以使其不會傳播。所以實際上它將把一個失敗的測驗變成一個通過的測驗,反之亦然。
為了使它更方便和可讀,您可以撰寫幾個擴展函式,如下所示:
fun shouldFail(block: () -> Unit) = shouldThrow<AssertionError>(block)
fun shouldNotFail(block: () -> Unit) = shouldNotThrow<AssertionError>(block)
事實上,KotestshouldFail在標準斷言中包含了該函式,因此您甚至不需要自己定義它。它們的實作與我在這里建議的相同。但是,它們不包括 a shouldNotFail,大概是因為有用性有點可疑。在“shouldNotFail”中包裝一個測驗,如果斷言失敗,它就會失敗,如果斷言通過,它就會通過,這就是......如果你根本沒有將它包裝在任何東西中它會做的事情。
要測驗您自己的斷言函式,您可以像這樣使用它:
shouldFail { 1 shouldBe 2 }
如果您查看Kotest本身的源代碼,您會發現許多內置斷言函式的單元測驗正是使用這種方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/513958.html
標籤:单元测试科特林测试
