[英]Unit testing several implementation of the same trait/interface
我主要在scala和java中編程,在scala和junit中使用scalatest進行單元測試。 我想將相同的測試應用於相同接口/特征的多個實現。 這個想法是要驗證接口合同是否得到執行,並檢查Liskov替換原理。
例如,在測試列表的實現時,測試可以包括:
最佳做法是什么?
在Java / JUnit中,我通常通過使用抽象測試用例來處理此問題,特定測試類的測試從該測試用例繼承所有測試,並使用實例化實現的設置方法。 我無法觀看當前發布的視頻Abyx,但我懷疑這是一個基本想法。
如果您不介意引入另一個測試框架,則另一個有趣的可能性是使用JDave Specification類。
我還沒有嘗試將它們與Scalatest或Scala特性和實現一起使用,但是應該可以做類似的事情。
聽起來這可能是共享測試的工作。 共享測試是由不同夾具對象共享的測試。 即,相同的測試代碼在不同的數據上運行。 ScalaTest確實對此提供支持。 在您喜歡的樣式特征的文檔中搜索“共享測試”,該文檔將測試表示為函數(Spec,WordSpec,FunSuite,FlatSpec等)。 一個例子是FlatSpec的語法:
it should behave like emptyList
請參閱FlatSpec
文檔中的共享測試
使用JUnit 4可以輕松進行合同測試, 這是Ben Rady的視頻。
對於Scala,強烈考慮使用ScalaCheck。 所有這些合同都可以在ScalaCheck中表示為單行規范。 運行時,ScalaCheck將隨機生成可配置數量的樣本輸入,並檢查所有規格是否成立。 這是創建單元測試時可能出現的最語義密集的方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.