我目前有一組單元測試,它們對於一些Rest API端點是一致的。說這個類是這樣定義的。NUnit 3.x - 用於後代測試類的TestCaseSource
public abstract class GetAllRouteTests<TModel, TModule>
{
[Test]
public void HasModels_ReturnsPagedModel()
{
// Implemented test
}
}
有了實現的測試夾具看起來像:
[TestFixture(Category = "/api/route-to-test")]
public GetAllTheThings : GetAllRouteTests<TheThing, ModuleTheThings> { }
這使我能夠在所有運行一些常用的測試獲得所有/列表中的路由。這也意味着我有直接鏈接到正在測試的模塊的類,以及Resharper/Visual Studio/CI中的測試和代碼之間的鏈接「正常工作」。
挑戰在於某些路由需要查詢參數來測試通過路由代碼的其他路徑;
例如/ API /路徑 - 測試?類別=大。
由於[TestCaseSource]需要靜態字段,屬性或方法,因此似乎沒有很好的方法來覆蓋要傳遞的查詢字符串列表。我提出的最接近的東西看起來像一個黑客。即:
public abstract class GetAllRouteTests<TModel, TModule>
{
[TestCaseSource("StaticToDefineLater")]
public void HasModels_ReturnsPagedModel(dynamic args)
{
// Implemented test
}
}
[TestFixture(Category = "/api/route-to-test")]
public GetAllTheThings : GetAllRouteTests<TheThing, ModuleTheThings>
{
static IEnumerable<dynamic> StaticToDefineLater()
{
// yield return all the query things
}
}
這是可行的,因爲靜態方法是爲已實現的測試類定義的,並且由NUnit找到。巨大的黑客。對於其他使用抽象類的人也是有問題的,因爲他們需要「知道」將StaticToDefineLater實現爲靜態。
我正在尋找更好的方法來實現這一目標。看起來好像在NUnit 3.x中刪除了非靜態的TestCaseSource源,所以沒有了。
在此先感謝。
NOTES:
- GetAllRouteTests <>實現了許多試驗,而不是僅僅示出的一個。
- 在一次測試中迭代所有路線將「隱藏」所涵蓋的內容,所以想避免這種情況。
正如我們預期。 :-)另外,將數據放在單獨的類中,與將其放入測試類中相比,它要乾淨得多。 – Charlie
哦,整潔 - 沒有得到比框架的領導開發支持更好:) – j4nw
那麼是否需要在實施的夾具上定義[TestCaseSource *]屬性?有沒有一種方法可以在父裝置上定義它,以便通用測試可以在基礎/父裝置中實現? – Jason