单元测试单身人士

Eya*_*yal 11 .net c# singleton unit-testing

我有一个包含统计对象引用的单例.

当我对使用该单例的程序运行几个单元测试时 - 测试之间持续的值.

我在做Program.Main()的时候,它都是在单元测试之间重新开始,但不知怎的,它会记住上次测试的结果.

如何编写将彼此隔离的单元测试(我不想要clean()函数 - 我希望它重新开始使用新的"所有内容"),

Roy*_*tus 19

简短版本:不要把你的单身人士写成单身人士.将它们写为普通类,并通过Inversion of Control容器调用它们,您可以在其中将类配置为单例.

这样,您可以对该类进行单元测试,如果您今天或明天决定单例不是该类的正确生活方式,只需修改IoC容器的配置即可.


Phi*_*ppe 5

我在这里写了一篇关于此的文章:http://pvlerick.github.io/2017/03/how-to-get-rid-of-a-singleton

长话短说:

  1. 从 Singleton 中提取一个接口(即使您不拥有它)并使您的类针对该接口而不是 Singleton 的实例工作;
  2. 根据您是否拥有 Singleton,您可以让它实现该接口,否则您将需要一个简单的适配器。

  • 每次测试创建一个新的“AppDomain”是相当困难的。例如,NUnit 为每个测试会话创建一个新的 AppDomain(一次通过所有选定的测试)。然后,NUnit 必须将其代码注入到“AppDomain”中才能运行测试。这可不是小事。你不能只是创建一个新的并期望事情能够在其中神奇地运行。你必须让你的代码在其中运行。总的来说,这个答案有可能性,但我不同意“这不应该是太困难的部分”。 (3认同)