gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 01:34:35 24 4
gpt4 key购买 nike

我正在使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com