我使用的是MSTest,我希望爲測試類中的所有方法一次設置相同的測試類別,而無需單獨爲每個方法設置TestCategory屬性。如何才能做到這一點?如何爲類中的所有測試設置測試類別
最方便,最明顯的方法是在類上設置TestCategory屬性,但它只能應用於方法。
最終目標是在TFS簽入的測試運行期間跳過集成測試。
我使用的是MSTest,我希望爲測試類中的所有方法一次設置相同的測試類別,而無需單獨爲每個方法設置TestCategory屬性。如何才能做到這一點?如何爲類中的所有測試設置測試類別
最方便,最明顯的方法是在類上設置TestCategory屬性,但它只能應用於方法。
最終目標是在TFS簽入的測試運行期間跳過集成測試。
解決此限制的一種方法是將測試類別放入每個測試方法的開頭。例如,命名你的單元測試
public void UnitTestDoSomething_ExpectThis()
和你的集成測試
public void IntegrationTestDoSomething_ExpectThis()
然後,當你做你的TFS查詢來獲取集成測試,你可以做
Field[Automated Test Name] with Operator[Contains] and Value[IntegrationTest]
雖然這不是一個完美的解決方案,它將幫助您區分代碼和TFS中的測試。或者,您可以查看區域和迭代路徑。
但你如何處理多個類別? – Dagrooms 2017-05-17 20:06:16
您可以按「類名稱」分組到Test Explorer面板。
通過測試TestCategory屬性,僅僅因爲C#中的屬性是元數據並且不能用作動態值,您無法解決您的問題。
最終目標是在TFS 簽入的測試運行期間跳過集成測試。
還有其他的方法可以做到這一點。在您的TFS版本中,you can set which unit tests you want to run, depending on their assembly name.
作爲默認行爲,它將在名稱中包含「test」的程序集中運行所有單元測試。一個簡單的解決方法是將你的集成測試重新命名爲不包含「測試」的東西。
如果你想使用類別,你可以嘗試使用AOP。例如,使用Postsharp,您可以在集成測試程序集中創建一個方面,該方面爲puts the attribute on the method。然後,如果所有測試分組在一個dll或每個集成測試類中,則爲集成程序集中的所有公用方法啓用該方面。
我一直在尋找類似的東西,而且我已經找到了一個解決方案,可以很好地滿足我的需求。
這並不不解決在每個階級基礎應用TestCategory,的問題,但可以使用/test:
命令行參數mstest
指定搜索字符串相匹配的充分的任何部分合格方法名稱的測試。這意味着您通常可以匹配類或名稱空間,或者您可以到達的任何搜索字符串,以匹配目標測試。如果不這樣做,您可以多次使用/test:
參數。即:
> mstest /testcontainer:My.dll /test:My.FullyQualified.Namespace
/test:My.FullyQualified.OtherNamespace.OtherClass
有趣。不要認爲有可能在類中使用TFS測試標記所有方法。 TFS理解TestCategory和Priority,這些屬性只是方法特定的。您可以將集成測試移至獨立的項目,並指示TFS不運行它。 – nikita 2013-04-05 12:34:29
你可以將你的單元和集成測試分成兩個不同的程序集,然後相應地配置你的構建? – 2013-04-05 14:35:46
好吧,我們有幾十個庫,每個庫都有一個相應的測試庫,可能包含單元測試和集成測試。將它們中的每一個拆分爲單元庫和集成測試庫是可能的,但看起來並不像最優雅的方法。 – alex 2013-04-05 16:33:36