繁体   English   中英

在 MSTest 中每个测试用例之后清除所有 static 数据

[英]Clear all static data after each test case in MSTest

我想用 MSTest 为我的库编写测试。 TestCase1 运行后,它会做一些事情,设置 MyData(我的库内部类的私有 static 字段),如:

internal MyClass{private static int MyData;}

当 TestCase2 运行时,它将重新使用该数据。

我已经编写了一个 Reset 方法并在 TestInitialize 方法内容中调用它,例如:

var type = MyAssembly.GetType("MyClass");
var privateType = new PrivateType(type);
privateType.SetStaticField("MyData", 0);

如您所见,该方法会将 static 字段重置为 0,但它需要知道属性名称和 class(“MyClass”和“MyData”)。

现在,我用我的混淆 dll 进行测试,测试将失败,因为名称将被更改。 此外,在我的库中,我引用了第三方库,它也可以将数据存储在 static 字段中。 它将使TestCase2 重用由TestCase1 设置的数据,而TestCase2 将始终失败。

如何在 TestInitialize 中重置所有 static 字段?

** 更新:

我可以看到一个解决方案,我可以在单独的 AppDomain 上运行每个测试用例,它可能会变慢,但我可以尝试。 问题是我不知道如何在单独的 AppDomain 中正确运行每个测试用例?

经过几天阅读文档和示例后,我发现没有更好的解决方案。 我和一些同事讨论过,我认为这应该是我测试库设计的问题,而不是我的测试设计问题。

将数据保存在库 static 字段中并更改它将使该数据与正在运行的进程或实例保持耦合。 在现实生活中,如果用户运行 2 个(或更多)使用该库的应用程序的进程(实例),那么 static 数据将很容易以不可预知的方式更改,并带来巨大的灾难。 因此,通过清除 static 数据来解决我的测试问题只是一个“让代码运行”的技巧,而这个棘手的解决方案将真正的问题隐藏在代码中——更危险。

将数据保存在 static 字段中确实是个坏主意 如果该数据不是 STATIC,请不要这样做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM