![](/img/trans.png)
[英]Run/Group Tests by Category Attribute of NUnit in Visual Studio
[英]Azure Devops Visual Studio Tests task cannot discover Nunit tests with the TestCaseSource attribute
我正在嘗試將 Nunit 的 [TestCaseSource] 屬性與從 Azure DevOps 運行的自動化測試一起使用。
示例:未發現此測試
public static object[] TestSource = new[]
{
new[] { new MyType() },
new[] { new MyType() },
new[] { new MyType() }
};
[Test, TestCaseSource("TestSource")]
public void MyTestMethod(MyType value)
{
...
}
不幸的是,我的測試方法無法執行,因為“在測試機器上找不到與源過濾條件匹配的測試程序集,或者沒有發現與測試過濾條件匹配的測試。驗證機器上是否存在測試程序集並且測試過濾條件正確。 ”錯誤。
但是,當我從測試方法中刪除 TestCaseSource 屬性時,測試能夠被執行,這意味着可以正常找到它們,這導致了 TestCaseSource 屬性使我的測試無法發現的問題。
示例:發現此測試
[Test]
public void MyTestMethod()
{
...
}
我相信我在版本中設置了一些錯誤,這應該可以工作,因為當我從 Visual Studios 測試資源管理器運行測試時,[TestCaseSource] 測試方法可以正常工作。
我的 DevOps 發布管道非常簡單,我使用帶有存檔文件模式的提取文件任務,例如“ $(System.DefaultWorkingDirectory)/SolutionName/drop/SolutionName.Tests.zip ”和“ $(System.DefaultWorkingDirectory)的目標文件夾” /測試“
然后我有一個 Visual Studio 測試任務 (2.),它通過測試運行選擇測試並搜索“ $(System.DefaultWorkingDirectory)/tests ”文件夾
我最好的猜測是,也許我需要在我的測試項目中將 Visual Studio 測試任務的“自定義測試適配器路徑”字段設置為 NUnit3Adapter Nuget package,但我不確定在哪里/如何獲得它的路徑。
我是否需要更改我的管道以包含 NUnit3Adapter,或者還有其他原因導致我的測試無法發現? 我出於某種原因進行了廣泛的搜索,據我所知,沒有其他人對 [TestCaseSource] 有這個問題,這讓我相信我做錯了什么。
更新:
經過更多的搜索和調查,我想我已經找到了問題的根源,但我不知道如何解決它。
當我通過 Visual Studio 測試資源管理器將我的測試方法關聯到 Azure DevOps 測試用例以進行關聯自動化時,測試方法的名稱設置不正確。
示例:從之前給出的這個測試方法
public static object[] TestSource = new[]
{
new[] { new MyType() },
new[] { new MyType() },
new[] { new MyType() }
};
[Test, TestCaseSource("TestSource")]
public void MyTestMethod(MyType value)
{
...
}
如果我將MyTestMethod與工作項相關聯,DevOps 中的“自動測試名稱”字段將顯示“SolutionName.Tests.MyTestMethod”作為值。
但是我認為這是錯誤的,而是名稱需要是“ SolutionName.Tests.MyTestMethod(MyType) ”
我認為這是因為在某一時刻,我確實得到了一個與“SolutionName.Tests.MyTestMethod(MyType)”相關聯的測試,並且效果很好。
我現在的問題是如何讓“關聯測試用例”function 在測試方法名稱的末尾包含(MyType) ?
似乎我找到了自己問題的答案,經過進一步的試驗和錯誤,我設法讓一切正常工作。
實際上,最終結果是,因為我的更新指定了 Visual Studio 測試資源管理器的“關聯到測試用例”function 沒有像我預期的那樣填寫“自動化測試名稱”。
示例:無參數
"SolutionName.Tests.MyTestMethod"
但是最終我發現您必須首先在本地執行測試。 然后,當測試結果通過時,關聯到預期的測試用例。
只有在測試方法名稱的參數部分正確顯示在 Azure DevOps“自動測試名稱”字段中之后。
示例:帶參數
"SolutionName.Tests.MyTestMethod(MyType)"
一旦我這樣做了,我的所有測試都會在我的代理上被發現並正確執行。
我不確定這是否是故意行為。 我的搜索都沒有將其作為預期的用戶體驗返回。 它對我的工作越少越好。
筆記
雖然這可行,但我沒有看到 azure 開發操作中的 object[] 的每個迭代的每個單獨的測試結果。 要么這是一個錯誤,要么我試圖做的不是預期的行為。 除此之外,一切都對我有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.