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

时间:2019-10-28 17:22:54

标签: 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 Test Explorer运行测试时,[TestCaseSource]测试方法可以正常工作

>

我的DevOps发布管道非常简单,我使用带有“ $(System.DefaultWorkingDirectory)/SolutionName/drop/SolutionName.Tests.zip ”等存档文件模式的解压缩文件任务“ $(System.DefaultWorkingDirectory)/ tests ”的目标文件夹

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

我的最佳猜测是,也许我需要将Visual Studio Test任务的“ 自定义测试适配器的路径”字段设置为我的测试项目中的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)

1 个答案:

答案 0 :(得分:0)

似乎我找到了自己的问题的答案,经过进一步的尝试和错误,我设法使一切正常。

有效地,最终结果是,因为我的更新指定Visual Studio Test Explorer的“与测试用例关联”功能没有按我期望的那样填写“自动测试名称”。

示例:不带参数

"SolutionName.Tests.MyTestMethod"

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

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

示例:带有参数

"SolutionName.Tests.MyTestMethod(MyType)"

一旦执行完所有这些测试,我的代理就会被发现并正确执行。

我不确定这是否是故意行为。我的搜索都没有将此作为预期的用户体验返回。从来没有减少它为我工作。

注意

尽管这行得通,但是我在Azure开发人员中看不到object []每次迭代的每个测试结果。那是一个错误,还是我试图做的不是预期的行为。除此之外,一切都对我有用。