Azure Devops Visual Studio 测试任务无法发现具有 TestCaseSource 属性的 Nunit 测试
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 测试资源管理器。
我的 DevOps 发布管道非常简单,我使用带有存档文件模式的提取文件任务,如“$(System.DefaultWorkingDirectory)/SolutionName/drop/SolutionName.Tests.zip ”和目标文件夹“$(System.DefaultWorkingDirectory)/tests”
然后我有一个 Visual Studio 测试任务 (2.) 通过测试 运行 选择测试并搜索文件夹 "$(System.DefaultWorkingDirectory)/tests
我最好的猜测是,也许我需要将 Visual Studio 测试任务的“自定义测试适配器的路径”字段设置为我的 NUnit3Adapter Nuget 包测试项目,但我不确定 where/how 获取它的路径。
我是否需要更改我的管道以包含 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 中的 "Automated test name" 字段将显示 "SolutionName.Tests.MyTestMethod" 作为值。
you can see here
但是我认为这是错误的,名称应该是“SolutionName.Tests.MyTestMethod(MyType)”
我认为这是因为有一次我确实得到了一个相关的测试,比如 "SolutionName.Tests.MyTestMethod(MyType)",而且它运行良好。
我现在的问题是如何让 "associate test case" 函数在测试方法名称末尾包含 (MyType)?
看来我找到了自己问题的答案,经过进一步的尝试和错误后,我设法使一切正常。
实际上最终结果是,因为我的更新指定 Visual Studio Test Explorer 的 "Associate to test case" 函数没有像我期望的那样填写 "Automated test name"。
示例:无参数
"SolutionName.Tests.MyTestMethod"
但最终我发现您必须先在本地执行测试。然后当测试结果通过时,关联到预期的测试用例。
只有在测试方法名称的参数部分才会正确显示在 Azure DevOps "Automated test name" 字段中。
示例:带参数
"SolutionName.Tests.MyTestMethod(MyType)"
完成此操作后,我的所有测试都会在我的代理上被发现并正确执行。
我不确定这是否是故意的行为。 None 我的搜索将此作为预期的用户体验返回。尽管如此,它对我还是有用的。
备注
尽管这可行,但我没有看到 azure dev-ops 中的对象[] 的每次迭代的每个单独测试结果。要么这是一个错误,要么我试图做的不是预期的行为。不管怎样,除此之外,一切都对我有用。
我正在尝试将 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 测试资源管理器。
我的 DevOps 发布管道非常简单,我使用带有存档文件模式的提取文件任务,如“$(System.DefaultWorkingDirectory)/SolutionName/drop/SolutionName.Tests.zip ”和目标文件夹“$(System.DefaultWorkingDirectory)/tests”
然后我有一个 Visual Studio 测试任务 (2.) 通过测试 运行 选择测试并搜索文件夹 "$(System.DefaultWorkingDirectory)/tests
我最好的猜测是,也许我需要将 Visual Studio 测试任务的“自定义测试适配器的路径”字段设置为我的 NUnit3Adapter Nuget 包测试项目,但我不确定 where/how 获取它的路径。
我是否需要更改我的管道以包含 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 中的 "Automated test name" 字段将显示 "SolutionName.Tests.MyTestMethod" 作为值。
you can see here
但是我认为这是错误的,名称应该是“SolutionName.Tests.MyTestMethod(MyType)”
我认为这是因为有一次我确实得到了一个相关的测试,比如 "SolutionName.Tests.MyTestMethod(MyType)",而且它运行良好。
我现在的问题是如何让 "associate test case" 函数在测试方法名称末尾包含 (MyType)?
看来我找到了自己问题的答案,经过进一步的尝试和错误后,我设法使一切正常。
实际上最终结果是,因为我的更新指定 Visual Studio Test Explorer 的 "Associate to test case" 函数没有像我期望的那样填写 "Automated test name"。
示例:无参数
"SolutionName.Tests.MyTestMethod"
但最终我发现您必须先在本地执行测试。然后当测试结果通过时,关联到预期的测试用例。
只有在测试方法名称的参数部分才会正确显示在 Azure DevOps "Automated test name" 字段中。
示例:带参数
"SolutionName.Tests.MyTestMethod(MyType)"
完成此操作后,我的所有测试都会在我的代理上被发现并正确执行。
我不确定这是否是故意的行为。 None 我的搜索将此作为预期的用户体验返回。尽管如此,它对我还是有用的。
备注
尽管这可行,但我没有看到 azure dev-ops 中的对象[] 的每次迭代的每个单独测试结果。要么这是一个错误,要么我试图做的不是预期的行为。不管怎样,除此之外,一切都对我有用。