Azure Devops Visual Studio 测试任务无法发现具有 TestCaseSource 属性的 Nunit 测试

Posted

技术标签:

【中文标题】Azure Devops Visual Studio 测试任务无法发现具有 TestCaseSource 属性的 Nunit 测试【英文标题】:Azure Devops Visual Studio Tests task cannot discover Nunit tests with the TestCaseSource attribute 【发布时间】:2019-10-28 17:22:54 【问题描述】:

我正在尝试将 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)/tests”的目标文件夹

然后我有一个 Visual Studio 测试任务 (2.),它通过测试运行选择测试并搜索“$(System.DefaultWorkingDirectory)/tests”的文件夹

我最好的猜测是,也许我需要在我的测试项目中将 Visual Studio 测试任务的“自定义测试适配器的路径”字段设置为 NUnit3Adapter Nuget 包,但我不确定在哪里/如何获得它的路径。

我是否需要更改我的管道以包含 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”作为值。

you can see here

但是我认为这是错误的,而是名称需要是“SolutionName.Tests.MyTestMethod(MyType)

我认为这是因为在某一时刻,我确实得到了一个关联的测试,例如“SolutionName.Tests.MyTestMethod(MyType)”,它运行良好。

我现在的问题是如何让“关联测试用例”功能在测试方法名称的末尾包含 (MyType)

【问题讨论】:

作为我的测试,TestCaseSource 方法在 Azure DevOps 中按预期工作。那么你能分享一些你的任务条件的截图吗?另外,如果您可以共享一个简单的代码示例,那就更好了。我用这个示例代码进行测试。 github.com/mdjwfk/testcasesource-sample 我也刚刚看到有人发布到 azure devops 问题跟踪器,可能存在相同的问题。我也会监控developercommunity.visualstudio.com/content/problem/798017/… 【参考方案1】:

似乎我找到了自己问题的答案,经过进一步的反复试验,我设法让一切正常。

实际上,最终结果是,因为我的更新指定了 Visual Studio 测试资源管理器的“关联到测试用例”功能,但没有像我预期的那样填写“自动化测试名称”。

示例:无参数

"SolutionName.Tests.MyTestMethod"

但最终我发现您必须首先在本地执行测试。然后,当测试结果通过时,关联到预期的测试用例。

只有在测试方法名称的参数部分正确显示在 Azure DevOps“自动测试名称”字段中之后。

示例:带参数

"SolutionName.Tests.MyTestMethod(MyType)"

一旦我这样做了,我的所有测试都在我的代理上被发现并正确执行。

我不确定这是否是故意行为。我的搜索都没有将其作为预期的用户体验返回。它对我的工作越少越好。

注意

虽然这可行,但我没有看到来自 azure dev-ops 中 object[] 的每次迭代的每个单独的测试结果。要么这是一个错误,要么我试图做的不是预期的行为。除此之外,一切都对我有用。

【讨论】:

以上是关于Azure Devops Visual Studio 测试任务无法发现具有 TestCaseSource 属性的 Nunit 测试的主要内容,如果未能解决你的问题,请参考以下文章

使用 Visual Studio 构建任务在 azure devops 中设置工作目录

全面支持开源,微软加速 Visual Studio 和 Azure DevOps 云升级

Visual Studio 2019:如何将您的项目保存到 Azure DevOps?

Azure DevOps Artifact Feed 在 Visual Studio 中给出 500 错误

Azure Devops Visual Studio 测试任务无法发现具有 TestCaseSource 属性的 Nunit 测试

Microsoft.NET.Sdk.CrossTargeting.targets 上的 Visual Studio Build in Azure DevOps 管道错误