![](/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.