gpt4 book ai didi

c# - 如何强制 MSTEST TestMethod 在运行前重置所有单例/静态?

转载 作者:可可西里 更新时间:2023-11-01 08:08:11 25 4
gpt4 key购买 nike

我在 Visual Studio 2008 中使用 MSTEST。如何让某个测试类中的每个单元测试方法都像第一个运行的测试一样运行,以便在运行每个测试之前重置所有全局状态?我不想使用 TestInitialize、ClassInitialize、AssemblyInitialize 等显式清理世界。例如:

[TestClass]
public class MyClassTests
{
[TestMethod]
public void Test1()
{
// The "Instance" property creates a new instance of "SomeSingleton"
// if it hasn't been created before.
var i1 = SomeSingleton.Instance;
...
}
[TestMethod]
public void Test2()
{
// When I select "Test1" and "Test2" to run, I'd like Test2
// to have a new AppDomain feel so that the static variable inside
// of "SomeSingleton" is reset (it was previously set in Test1) on
// the call to ".Instance"
var i2 = SomeSingleton.Instance;
// some code
}

虽然一个similar question出现在这个主题上,它只是澄清了测试不会并行运行。我意识到测试是串行运行的,但似乎没有办法为每个方法显式强制一个新的 AppDomain(或等同于清除所有状态的东西)。

理想情况下,我只想为我的单元测试的一小部分指定此行为,这样我就不必为不关心全局状态的测试支付新 AppDomain 创建的惩罚(我的绝大多数测试)。

最佳答案

最后,我写了一个使用 AppDomain.CreateDomain 的助手然后使用反射调用不同AppDomain下的单元测试。它提供了我需要的隔离。

This post在 MSDN 的论坛上显示了如果您只有少数静态需要重置时如何处理这种情况。 It确实提到了一些选项(例如使用反射和 PrivateType )。

我继续欢迎任何进一步的想法,特别是如果我遗漏了一些关于 MSTEST 的明显内容。

关于c# - 如何强制 MSTEST TestMethod 在运行前重置所有单例/静态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/193143/

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