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

标签 c# azure-devops automated-tests nunit

我正在尝试将 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 Test Explorer 将我的测试方法关联到 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)

最佳答案

看来我找到了自己问题的答案,经过进一步的试验和错误后,我设法让一切正常工作。

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

例子:没有参数

"SolutionName.Tests.MyTestMethod"

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

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

示例:带参数

"SolutionName.Tests.MyTestMethod(MyType)"

完成此操作后,我的所有测试都会被发现并在我的代理上正确执行。

我不确定这是否是故意行为。我的搜索都没有将此作为预期的用户体验返回。尽管如此,它对我还是很有效。

注意

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

关于c# - Azure Devops Visual Studio 测试任务无法发现具有 TestCaseSource 属性的 Nunit 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58595604/

相关文章:

java - Selenium/Cucumber 测试未在 Maven 中运行

c# - 如何在 Visual Studio 2017 for Unity 中启用智能感知

azure-devops - 带有 git-flow 的 Azure DevOps 发布管道

azure - 新部署的 azure 函数返回 404 Not Found 错误

Azure DevOps 预部署条件排除主分支以外的分支

python - 如何在 Django 中使用 Pytest 测试经过身份验证的 POST 请求

c# - 如何使用 Linq 和 XML 实现通用方法方法

c# - IEnumerable.Except 不起作用,那我该怎么办?

c# - 在不调试的情况下将测试日志写入 Visual Studio 输出 Pane ?

testing - FITSharp 'Include' 页面返回通过或失败