我将尝试使用[Nunit]的[TestCaseSource]属性在从Azure DevOps运行的自动化测试中运用。
例子:此测试未被发现。
我认为在发布中设置了错误的内容,因为当我从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测试用例进行关联的自动化时,测试方法的名称未正确设置。例如:给定前面的测试方法。
如果我将 MyTestMethod 与一个工作项相关联,DevOps中的“自动化测试名称”字段将显示“SolutionName.Tests.MyTestMethod”作为值。
你可以看到这里 然而,我认为这是错误的,正确的名称应该是“SolutionName.Tests.MyTestMethod(MyType)”。
我之所以这样认为,是因为在某个时候,我设法将我的其中一个测试关联起来,例如“SolutionName.Tests.MyTestMethod(MyType)”,然后它能正常运行。
现在我的问题是如何让“关联测试用例”功能在测试方法名称末尾包括(MyType)?
例子:此测试未被发现。
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)?