c# - MSTest 中是否有非静态 ClassInitialize 替代方案?

标签 c# visual-studio-2012 mstest selenium-chromedriver

我正在使用 Visual Studio 2012 测试框架(我想那是 MSTest)。我有一些代码需要在各种测试方法运行之前且仅运行一次。 ClassInitialize 看起来很完美,直到我了解到它必须是静态的。

首先,我有一个 ChromeDriver 的实例变量:

private ChromeDriver driver;

我想我需要这样的东西,但不是静态的:

[ClassInitialize]
public static void Initialize() {
    ChromeOptions options = new ChromeOptions();
    options.AddArgument("test-type");
    options.AddArgument("start-maximized");
    options.LeaveBrowserRunning = true;
    driver = new ChromeDriver(@"C:\MyStuff", options);
    driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(4));
}

上面的代码无法编译,因为类实例正在这个静态方法中被更新。但我不得不将其设为静态,否则运行时错误会导致“这必须是静态方法”和“错误的签名”等。

如果我在类构造函数或 TestInitialize 方法中启动我的 ChromeDriver(声明为类变量),一切正常,但为每个测试打开一个新的浏览器窗口。因此,当我有 50 个测试方法时,我将打开 50 个 Chrome 实例,这很糟糕。

我只想为每个测试重用我的 driver 实例,而不必每次都启动一个新的实例,这会打开一个新的浏览器。

如何做到这一点?

最佳答案

我不确定这是否真的是最佳方法,但您可以将其设为静态变量 - 毕竟从实例方法(您的测试)访问静态变量没问题。

请注意,如果您尝试并行运行测试,这可能会导致问题。可能值得研究什么是测试实例生命周期 - 您可以在其中使用一个实例进行多个测试,在这种情况下,在构造函数中初始化实例变量可能是另一种合理的方法。

(除非初始化驱动程序真的需要很长时间,否则我很想在每次测试的基础上创建它......)

关于c# - MSTest 中是否有非静态 ClassInitialize 替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30084587/

相关文章:

.net - 无法排队测试运行 : Unable to start the agent process(Visual Studio 2010)

c# - 使用 DbContext 的服务器端计时器

c# - WPF MVVM-以编程方式触发datagrid排序方向的箭头

TFS - 有没有办法查看哪些 TestCase 工作项不在任何测试计划中?

c++ - VS2012 中的 emplace_back 和 shared_ptr vector

unit-testing - 由于找不到 "TechTalk.SpecFlow"文件,SpecFlow 单元测试失败

c# - 通过 Entity Framework 创建记录时未插入数据库默认值

c# - WPF 样式按钮 MouseOver 问题

unit-testing - 如何按类别过滤 Visual Studio 2012 中的单元测试?

c# - 单元测试 : Sending complex object as a input parameter to my test method using MSTest