我正在使用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
答案 0 :(得分:8)
您无法在标有TestInitializeAttribute
的方法中添加参数,但也有其他选择。
如果你有多个版本1的测试和一个版本2的编号,最好的选择(imo)就是简单地创建两个不同的测试类。
您不能使用[TestInitialize]
并在每个测试开始时调用两个私有方法之一,每个方法都会启动相应的应用程序。
您可以通过某种方式使用TestContext
属性。它在测试执行之前自动设置,可以从TestInitialize方法访问。其中的信息可能会为您提供足够的信息来决定启动哪个应用程序。我不确定有没有理由在选项1上选择这个。
如果所有测试都需要在两个版本上执行,则可以使用data driven test。这允许您使用不同的输入多次执行单个测试。这还需要TestContext
属性。但是,我个人认为MSTest中的数据驱动测试非常糟糕。它需要使用DataSourceAttribute
,除非您的目标是Windows应用商店。
使用继承。将所有需要执行的测试放在没有[TestInitialize]
的基类中。仅将测试初始化放在两个继承的类中。不要使用TestClassAttribute
标记基类,并且最好使其为abstract
,这样在没有任何形式的初始化的情况下也不会运行测试。
这完全取决于具体情况。如果你觉得你真的需要选项4并且你没有针对Windows Store,我会认真考虑NUnit,它提供了更灵活的参数化测试。