【发布时间】:2013-12-09 00:23:44
【问题描述】:
我正在将我们的单元测试从 Moles 转换为新的 VS 2012 Fakes。我们的几个单元测试“假”RNGCryptoServiceProvider。我们能够“消除”这个问题,但在 Fakes 中似乎没有为它创建 Shim。换句话说,我希望找到一个 ShimRNGCryptoServiceProvider。
一个更有趣的方面是我在网上找到了一本名为“使用 Microsoft Fakes 进行更好的单元测试”的电子书。在那里,他们展示了一个伪造 Random 函数的示例。这是一个例子。
System.Fakes.ShimRandom.Constructor = (real) => { };
System.Fakes.ShimRandom.AllInstances.NextDouble = this.NextDouble;
System.Fakes.ShimRandom.AllInstances.NextInt32Int32 = this.NextInt32Int32;
private int NextInt32Int32(Random random, int i, int arg3)
{
return (i + arg3) / 2;
}
我什至没有在我的项目中看到 System.Fakes.ShimRandom。 我看到的 System.Fakes 仅有的两个 Shims 是 ShimDateTime 和 @987654326 @。
- 我为 System 创建了 Fakes 程序集(它给了我 mscorlib.4.0.0.0.Fakes 和 System.4.0.0.0.Fakes)
- 我没有更改配置文件(mscorlib.fakes 和 System.fakes)
- 我的 Fakes 项目设置为在“任何 CPU”平台中构建。
- 我们正在使用 .Net Framework 4.5 和 VS 2012 Ultimate。
我确实看到了一堆存根,包括System.Fakes.StubRandom 和System.Fakes.StubRandomNumberGenerator,但是存根对我不起作用,因为我无法将它们注入到被测代码中。
- 知道为什么我没有得到 ShimRandom,因为在电子书中有一个例子,我应该得到它?
- 如何“伪造”
RNGCryptoServiceProvider?
【问题讨论】:
-
RNGCryptoServiceProvider是sealed class。这是您无法更改的特定实现。您可能应该首先尝试伪造它的基类,更通用的RandomNumberGenerator。 -
另外,您提到存根无法工作,因为您无法注入它。这可能会告诉你,要么你不应该编写这个测试,要么你应该注入依赖。
标签: c# unit-testing visual-studio-2012 microsoft-fakes