我正在将我们的单元测试从Moles转换为新的VS 2012 Fakes。我们的几个单元测试“假”RNGCryptoServiceProvider
。我们能够“蹭”出来,但似乎在假货中没有Shim创造它。换句话说,我期望找到一个ShimRNGCryptoServiceProvider。似乎无法伪造RNGCryptoServiceProvider
一个更有趣的方面是,我在网上发现了一本名为“微软假货更好的单元测试”的电子书。在那里他们展示了一个伪造随机函数的例子。这里是例子。
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
是ShimDateTime
和ShimGuid
。
- 我创建了系统假货组件(这给了我mscorlib.4.0.0.0.Fakes和System.4.0.0.0.Fakes)
- 我没有更改配置文件(mscorlib.fakes和系统。假货)
- 我将我的Fakes项目设置为构建在“任何CPU”平台上。
- 我们正在使用.Net Framework 4.5和VS 2012 Ultimate。
我确实看到了一堆存根,包括System.Fakes.StubRandom
和System.Fakes.StubRandomNumberGenerator
,但存根不会为我工作,因为我没有他们注入的代码测试的方式。
- 任何想法为什么我没有得到一个ShimRandom,当它似乎我应该是因为它有一个例子在电子书?
- 我该如何“伪造”
RNGCryptoServiceProvider
?
'RNGCryptoServiceProvider'是'密封类'。这是您无法更改的特定实施。你应该先尝试伪造它的基类,更通用的['RandomNumberGenerator'](http://msdn.microsoft.com/en-us/library/system.security.cryptography.randomnumbergenerator(v = vs.110) )的.aspx)。 –
此外,你提到一个存根将不起作用,因为你没有办法注入它。这可能会告诉你,你不应该写这个测试,或者你应该注入依赖。 – Magus