我们可以在 C# 中向 TestInitialize 发送参数吗?
Can we send a parameter to TestInitialize in C#?
我正在使用 CodedUI 进行自动化测试。因为我正在使用两个应用程序,所以假设 A 和 B。A 需要在每个测试用例开始执行时启动。所以我把它放在 TestInitialize 中。所以我从 TestInitialize 调用一个函数并发送参数,即应用程序 A 的位置。但是如果有不同版本的 App a 我想发送一个参数到 TestInitialize 。
我现在的密码是
[TestInitialize()]
public void MyTestInitialize()
{
App_Launch(@"C:\Emulator\App_Version1\Launch_App.exe");
}
有不同的应用程序版本
因此,如果我必须启动 App_Version2,那么我必须更改硬编码参数中的文件夹名称。
如果我想要以下内容怎么办
[TestInitialize()]
public void MyTestInitialize(string Path)
{
App_Launch(@Path);
}
将路径发送到 TestInitialize
您不能向标有 TestInitializeAttribute
的方法添加参数,但有一些替代方法。
如果版本 1 有多个测试,版本 2 有多个测试,最好的选择 (imo) 是简单地创建两个不同的测试 classes.
您可以简单地不使用 [TestInitialize]
并在每次测试开始时调用两个私有方法之一,每个方法启动各自的应用程序。
您可以以某种方式使用 TestContext
属性。它在执行测试之前自动设置,可以从 TestInitialize 方法访问。其中的信息可能会为您提供足够的信息来决定启动哪个应用程序。不过,我不确定是否有充分的理由选择这个而不是选项 1。
如果需要在两个版本上执行所有 in 测试 ,您可以使用 data driven test. This allows you to execute a single test multiple times with different input. This also requires the TestContext
attribute. However, personally I find data driven tests in MSTest horrendous. It requires the use of the DataSourceAttribute
,除非您的目标是 [=48] =] 存储应用程序。
使用继承。将需要为两个版本执行的所有测试放在没有 [TestInitialize]
的基础 class 中。仅将测试初始化放在两个继承的 classes 中。不要用 TestClassAttribute
标记基数 class,最好将其标记为 abstract
,这样如果没有任何形式的初始化,测试也不会是 运行。
这完全取决于情况,真的。如果您觉得您确实需要选项 4 并且您的目标不是 Windows Store,我会认真考虑 NUnit,它提供了更灵活的参数化测试。
我正在使用 CodedUI 进行自动化测试。因为我正在使用两个应用程序,所以假设 A 和 B。A 需要在每个测试用例开始执行时启动。所以我把它放在 TestInitialize 中。所以我从 TestInitialize 调用一个函数并发送参数,即应用程序 A 的位置。但是如果有不同版本的 App a 我想发送一个参数到 TestInitialize 。
我现在的密码是
[TestInitialize()]
public void MyTestInitialize()
{
App_Launch(@"C:\Emulator\App_Version1\Launch_App.exe");
}
有不同的应用程序版本 因此,如果我必须启动 App_Version2,那么我必须更改硬编码参数中的文件夹名称。
如果我想要以下内容怎么办
[TestInitialize()]
public void MyTestInitialize(string Path)
{
App_Launch(@Path);
}
将路径发送到 TestInitialize
您不能向标有 TestInitializeAttribute
的方法添加参数,但有一些替代方法。
如果版本 1 有多个测试,版本 2 有多个测试,最好的选择 (imo) 是简单地创建两个不同的测试 classes.
您可以简单地不使用
[TestInitialize]
并在每次测试开始时调用两个私有方法之一,每个方法启动各自的应用程序。您可以以某种方式使用
TestContext
属性。它在执行测试之前自动设置,可以从 TestInitialize 方法访问。其中的信息可能会为您提供足够的信息来决定启动哪个应用程序。不过,我不确定是否有充分的理由选择这个而不是选项 1。如果需要在两个版本上执行所有 in 测试 ,您可以使用 data driven test. This allows you to execute a single test multiple times with different input. This also requires the
TestContext
attribute. However, personally I find data driven tests in MSTest horrendous. It requires the use of theDataSourceAttribute
,除非您的目标是 [=48] =] 存储应用程序。使用继承。将需要为两个版本执行的所有测试放在没有
[TestInitialize]
的基础 class 中。仅将测试初始化放在两个继承的 classes 中。不要用TestClassAttribute
标记基数 class,最好将其标记为abstract
,这样如果没有任何形式的初始化,测试也不会是 运行。
这完全取决于情况,真的。如果您觉得您确实需要选项 4 并且您的目标不是 Windows Store,我会认真考虑 NUnit,它提供了更灵活的参数化测试。