NUnit:如何根据 [TestFixture(typeof(param)))] 中的参数设置测试名称



我正在使用 NUnit + Webdriver + C#。安装程序类有下一个结构:

[TestFixture(typeof(InternetExplorerDriver))]
[TestFixture(typeof(ChromeDriver))]
public partial class SetupBase<TWebDriver> where TWebDriver : IWebDriver, new()
{       
public IWebDriver _driver;
[OneTimeSetUp]
public void OneTimeSetUp()
{  
Init();
}
}

如何设置测试名称以包括方法名称、参数和浏览器名称?

我尝试过功能,但没有帮助

ChromeOptions options = new ChromeOptions();
options.AddAdditionalCapability("Name", String.Format ("{0}_Chrome", TestContext.CurrentContext.Test.Name), true);

还尝试使用下一个代码,但无法找到如何将驱动程序类型传递给 NameAttribute 的方法

public class NameAttribute : NUnitAttribute, IApplyToTest
{
public NameAttribute(string name)
{
Name = String.Format("{0} {1}", name);
}
public string Name { get; set; }
public void ApplyToTest(Test test)
{
test.Properties.Add("Name", Name);
}
}

你能帮我吗?也许需要以某种方式更新基类结构?

这就是我在测试中的使用

public class _001_General<TWebDriver> : SetupBase<TWebDriver> where TWebDriver : IWebDriver, new()
{     
[OneTimeSetUp]
public void OneTimeSetupTest ()
{
//somework
}
[Test]
public void Test ()
{
//somework
}
}

此外,SetupBase 类还包含测试中使用的函数

在 NUnit 中,测试用例、测试方法、测试夹具和通用测试夹具类都是"测试",尽管我们有时松散地谈论"测试"作为测试用例的含义。

在您的示例中,将创建以下名称:

_001_General<TWebDriver> (or maybe _001_General<>)
_001_General<InternetExplorerDriver>
Test
_001_General<ChromeDriver>
Test

测试也有"全名",类似于类型或方法的全名。例如

_001_General<ChromeDriver>.Test

(注意:全名还将包括一个命名空间,我没有显示。

如果您使用的是显示全名的运行器,例如 NUnit 3 控制台运行程序,则没有问题。所以,我假设你不是。

某些运行器(如 NUnit 3 Visual Studio Test Adapter(使用简单的测试用例名称。因此,您最终会得到一堆显示为"测试"的测试。

这是你的问题吗?如果是这样,这不是一个答案。:-)但是,我会将其保留为部分,并在听到您想要使用的运行器以及您希望在其中显示的内容后添加它。

更新:

根据您的评论,您真正想看到的是测试全名 - 就像 TC 为您运行的 NUnit 3 控制台运行程序显示的那样。您希望使用 NUnit 3 VS 适配器在 VS IDE 中看到它们。

不幸的是,你现在不能。更多内容见下文。同时,这里有一些解决方法:

  1. 使用桌面上的控制台运行程序。它没有那么直观,但效果很好。这就是我经常工作的方式。步骤:

    • 安装控制台运行程序。我建议使用Chocolatey在全球范围内安装它,允许您在所有项目中使用它。
    • 设置项目以使用您喜欢的任何选项运行控制台运行程序。
    • 确保使用外部控制台窗口,以便获得使控制台运行程序更易于使用的颜色显示选项。
    • 调整窗口大小,以便您可以看到所有内容(如果有足够的屏幕空间(,或者只是让控制台在VS之上弹出。
  2. 尝试通过以包含驱动程序参数的方式设置测试名称来欺骗 VS。这就是你已经在做的事情,听起来好像你已经从这个选项中得到了几乎所有的东西,即.class没有类参数的名称。您可以尝试通过为每个驱动程序创建单独的类来更进一步。显然,这将使您拥有的类数量成倍增加,但不必复制代码。您可以使用泛型类的继承来创建一个新类,其中每个位置都需要一个标头。喜欢。。。

    公共类TestXYZDriver:测试驱动程序...

这可能是很多工作,因此这实际上取决于现在获得包含夹具参数的视觉结果对您有多重要。


将来,您可以请求 NUnit 3 适配器项目提供按全名列出测试的选项。我已经有几年没有从事这个项目了,所以我不确定这是否真的可能。它可能不完全由适配器控制,因为 VS 控制显示的内容。

最新更新