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

时间:2015-03-19 06:32:23

标签: c# coded-ui-tests

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

我现在的代码是

[TestInitialize()]
public void MyTestInitialize()
{
    App_Launch(@"C:\Emulator\App_Version1\Launch_App.exe");
}

有diff app版本 因此,如果我必须启动App_Version2,那么我必须更改硬编码参数中的文件夹名称。

如果我想要以下内容

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

将路径发送到TestInitialize

1 个答案:

答案 0 :(得分:8)

您无法在标有TestInitializeAttribute的方法中添加参数,但也有其他选择。

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

  2. 您不能使用[TestInitialize]并在每个测试开始时调用两个私有方法之一,每个方法都会启动相应的应用程序。

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

  4. 如果所有测试都需要在两个版本上执行,则可以使用data driven test。这允许您使用不同的输入多次执行单个测试。这还需要TestContext属性。但是,我个人认为MSTest中的数据驱动测试非常糟糕。它需要使用DataSourceAttribute,除非您的目标是Windows应用商店。

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

  6. 这完全取决于具体情况。如果你觉得你真的需要选项4并且你没有针对Windows Store,我会认真考虑NUnit,它提供了更灵活的参数化测试。