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