我已經檢查了這個.. similar question但我不確定答案...有沒有辦法爲接口編寫測試,然後對所有實現測試的類進行測試?
我目前有一個接口只能由一個類實現,但是遲早會發生變化。我現在有對接口的測試,並在一開始所有測試開始:
IFoo foo = GetConcreteFoo()
其中GetConcreteFoo是一樣的東西
IFoo GetConcreteFoo()
{
return new ConcreteFooA();
}
然而
,當我拿到美孚的多種實現,莫不是一種使所有測試運行在所有不同具體foos列表上的方法?
我認爲,如果沒有辦法,至少我可以複製/粘貼測試到一個新的文件,具體類的名稱,並更改GetConcreteFoo的返回對象...並且更改原始文件從(IFooTests到IConcreteFooATests)。
我不認爲這種方法是特別壞..但它不是太優雅/高明,因爲這將是在其上運行的所有具體實現相同的測試(文件)。
有沒有辦法讓它做到這一點?
(Im使用MSTests)
謝謝!
+1總體而言,這是一個很好的答案,但做這樣的集成測試也可以作爲迴歸測試套件。另一件事是,如果你有一個接口暗示「接口規範之外的語義保證」,那麼它就是抽象類而不是接口的主要候選者。 –
是的界面確實意味着語義上的保證,因爲它是一個獨立於實現的存儲庫,getAll全部獲取,Add添加一個新元素,Update更新一個元素等。該方法應該始終具有相同的可測試結果,獨立於實施。 我應該讓它成爲一個抽象類嗎?如果我這樣做,我仍然需要測試所有的實現。 雖然談論參數化測試讓我思考PEX,但我也要檢查一下。 –