簡體   English   中英

對相同特征/接口的幾種實現進行單元測試

[英]Unit testing several implementation of the same trait/interface

我主要在scala和java中編程,在scala和junit中使用scalatest進行單元測試。 我想將相同的測試應用於相同接口/特征的多個實現。 這個想法是要驗證接口合同是否得到執行,並檢查Liskov替換原理。

例如,在測試列表的實現時,測試可以包括:

  • 當且僅當且僅當它的大小為零時,實例才應該為空。
  • 調用clear之后,大小應為零。
  • 在列表中間添加一個元素,將使rhs元素的索引增加1。
  • 等等

最佳做法是什么?

在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM