Azure DevOps中的Visual Studio Tests任务无法发现使用TestCaseSource属性的NUnit测试。

3
我将尝试使用[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 Studio测试资源管理器运行测试时,[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”作为值。
你可以看到这里 然而,我认为这是错误的,正确的名称应该是“SolutionName.Tests.MyTestMethod(MyType)”。
我之所以这样认为,是因为在某个时候,我设法将我的其中一个测试关联起来,例如“SolutionName.Tests.MyTestMethod(MyType)”,然后它能正常运行。
现在我的问题是如何让“关联测试用例”功能在测试方法名称末尾包括(MyType)

作为我的测试,TestCaseSource方法在Azure DevOps中按预期工作。所以你能否分享一些任务条件的截图?如果你能分享一份简单的代码示例,那就更好了。我使用了这个样例代码进行测试。https://github.com/mdjwfk/testcasesource-sample - Frank Wang-MSFT
我刚刚也看到有人在Azure DevOps问题跟踪器上发布了可能与该问题相同的问题。 我也会监视那个帖子 https://developercommunity.visualstudio.com/content/problem/798017/nunit-parameterized-automated-tests-couldnt-associ.html - Alex
1个回答

3

我似乎找到了自己问题的答案,在进一步尝试和错误排查后,我成功让一切正常工作。

最终的结果是,正如我的更新指定的那样,在Visual Studio测试资源管理器的“关联到测试用例”功能中并没有像我期望的那样填入“自动化测试名称”。

例如:不带参数

"SolutionName.Tests.MyTestMethod"

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

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

示例:带参数

"SolutionName.Tests.MyTestMethod(MyType)"

一旦我执行了这些步骤,我的代理就会正确地找到并执行所有测试。
我不确定这是否是有意为之的行为。在我的搜索中,没有任何结果表明这是预期的用户体验。尽管如此,它对我起作用了。
注意:
虽然这个方法可行,但我无法在Azure Dev-Ops中从object[]中看到每个迭代的单个测试结果。这可能是一个bug或者我的操作并不是预期的行为。尽管如此,除了这一点以外,其他都运行正常。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接