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

时间:2018-10-10 08:52:28

标签: selenium-webdriver nunit parameterized-constructor

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

$merge_arr = ['mpc' => $mpc, 'vpc' => $vpc];
array_map(function($val) use (&$transfer_items, $merge_arr) {
    $transfer_items[] = array_merge(['article_no' => $val] ,$merge_arr);
}, is_array($povezani) ? $povezani : [$povezani]);

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

我尝试使用功能,但没有帮助

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

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

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

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

这就是我在测试中使用的方式

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);
        }
    }

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

1 个答案:

答案 0 :(得分:0)

在NUnit中,测试用例,测试方法,测试装置和通用测试装置类都是“测试”,尽管我们有时会松散地将“测试”视为测试用例。

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

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

测试还具有“全名”,类似于类型或方法。例如

_001_General<ChromeDriver>.Test

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

如果您使用的是显示全名的运行程序,例如NUnit 3 Console Runner,则没有问题。所以,我想你不是。 :-)

某些运行程序,例如NUnit 3 Visual Studio测试适配器,使用简单的测试用例名称。因此,最终您将获得一堆显示为“ Test”的测试。

是您的问题吗?如果是这样,那么答案就不多了。 :-)但是,在听到您要使用的跑步者以及其中显示的内容后,我将其保留为部分内容并添加。

更新:

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

很遗憾,您现在不能。 :-)详情请见下文。同时,这里有一些解决方法:

  1. 在桌面上使用控制台运行器。它不像视觉效果,但是效果很好。这就是我经常工作的方式。步骤:

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

    公共类TestXYZDriver:TestDriver ...

这可能需要做很多工作,所以这实际上取决于您现在获得包含灯具参数的视觉结果对您来说有多重要。


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