我们可以在C#中向TestInitialize发送一个参数吗



我正在使用CodedUI进行自动化测试。当我使用两个应用程序时,假设A和B。A需要在每个测试用例开始执行时启动。所以我把它放在了TestInitialize中。所以我从TestInitialize中调用一个函数,并发送参数,即应用程序a的位置。但是,如果有不同版本的应用程序a呢?我想向TestInitialize发送一个参数。

我现在的代码是

[TestInitialize()]
public void MyTestInitialize()
{
    App_Launch(@"C:EmulatorApp_Version1Launch_App.exe");
}

存在不同的应用程序版本因此,如果我必须启动App_Version2,那么我必须更改硬编码参数中的文件夹名称。

如果我想要以下内容怎么办

[TestInitialize()]
public void MyTestInitialize(string Path)
{
    App_Launch(@Path);
}

将路径发送到TestInitialize

不能将参数添加到用TestInitializeAttribute标记的方法中,但也有一些替代方法。

  1. 如果您有多个版本1的测试和一个版本2的测试,那么最好的选择(imo)就是简单地创建两个不同的测试类。

  2. 您不能简单地使用[TestInitialize]并在每次测试开始时调用两个私有方法中的一个,每个方法都启动各自的应用程序。

  3. 您可以通过某种方式使用TestContext属性。它是在执行测试之前自动设置的,可以从TestInitialize方法访问。其中的信息可能会为您提供足够的信息来决定启动哪个应用程序。不过,我不确定是否有充分的理由选择这个选项而不是选项1。

  4. 如果需要在两个版本上执行所有in测试,则可以使用数据驱动测试。这允许您使用不同的输入多次执行单个测试。这也需要TestContext属性。然而,就我个人而言,我发现MST中的数据驱动测试非常可怕。它需要使用DataSourceAttribute,除非您的目标是Windows应用商店应用程序。

  5. 使用继承。将两个版本都需要执行的所有测试放在不带[TestInitialize]的基类中。只将测试初始化放入两个继承的类中。不要用TestClassAttribute标记基类,最好将其设为abstract,这样测试就不会在没有任何形式初始化的情况下运行。

真的,这完全取决于情况。如果你觉得你真的需要选项4,而不是针对Windows应用商店,我会认真考虑NUnit,它提供了更灵活的参数化测试。

最新更新