- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在将我们的单元测试从 Moles 转换为新的 VS 2012 Fakes。我们的几个单元测试“伪造”RNGCryptoServiceProvider
。我们能够“挖”出来,但似乎在 Fakes 中没有为它创建的 Shim。换句话说,我希望找到一个 ShimRNGCryptoServiceProvider。
一个更有趣的方面是我在网上找到一本电子书,名为“Better Unit Testing with Microsoft Fakes”。在那里他们展示了一个伪造随机函数的例子。这是示例。
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。我看到的只有两个 Shim System.Fakes
是 ShimDateTime
和 ShimGuid
。
我确实看到了一堆 Stubs,包括 System.Fakes.StubRandom
和 System.Fakes.StubRandomNumberGenerator
,但 Stubs 不会为我工作,因为我无法将它们注入(inject)到被测代码中。
RNGCryptoServiceProvider
?最佳答案
MS Fakes 框架目前不支持这些类型。
另一种查找不受支持的类型的方法是,在您的 .fakes 文件中添加 Diagnostic = true例如。
<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/" Diagnostic ="true">
<Assembly Name="mscorlib" Version="4.0.0.0"/>
已更新
请注意,您无法伪造所有内容。这也意味着您也不能对所有内容进行填充。出于某些设计考虑,MS 已决定不对某些系统类进行 Shim。 MS 没有提供明确的列表,因为可以根据用户的 .NET 版本和目标 .NET 框架的组合来伪造类型。例如,在 .NET 4 中,System.Security 中的某些成员、System.Threading 中的类型 Fakes 不会像 Shims 那样生成。
您可以尝试覆盖此行为,例如将以下 xml 添加到 .Fakes 文件
<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/" Diagnostic ="true">
<Assembly Name="mscorlib" Version="4.0.0.0"/>
<ShimGeneration>
<Add FullName="System.Security.Cryptography"/>
</ShimGeneration>
</Fakes>
以上会产生与我在上面的回答中提供的相同的警告。这意味着它们不受支持。
但正如我之前所说,它是 .NET 版本和目标框架的组合。如果您可以更改目标 .NET 框架,例如 .NET 2,仍然使用 mscorlib 版本 4.0.0.0,您会看到为 RNGCryptoServiceProvider 生成的 Shim .
<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/" Diagnostic="true" TargetFrameworkVersion="2.0.0.0">
<Assembly Name="mscorlib" Version="4.0.0.0"/>
<ShimGeneration>
<Clear/>
<Add FullName="System.Security.Cryptography"/>
</ShimGeneration>
</Fakes>
同样适用于RandomNumberGenerator .
关于c# - 似乎无法伪造 RNGCryptoServiceProvider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20461084/
我正在将我们的单元测试从 Moles 转换为新的 VS 2012 Fakes。我们的几个单元测试是“假的”RNGCryptoServiceProvider。我们能够“挖”出这个,但假货中似乎没有为此创
有许多经过验证且完善的伪随机数生成算法可供使用,以及其他最近受到审查的算法;我想知道 .Net 4.0 RNGCryptoServiceProvider 使用哪种算法? 在启动正在进行的项目之前,我很
我正在将我们的单元测试从 Moles 转换为新的 VS 2012 Fakes。我们的几个单元测试“伪造”RNGCryptoServiceProvider。我们能够“挖”出来,但似乎在 Fakes 中没
我正在寻找一种获取随机字符的方法。我需要一个字符串,该字符串必须至少包含 2 个大写字母、至少 1 个数字和特殊字符。这是我的代码: public static string CreateRandom
我需要一个方法,它返回从最小值到最大值的随机数,包括这两个数字。我在文章 .NET Matters: Tales from the CryptoRandom 中找到了一些代码来自 Stephen To
有谁知道为什么 RNGCryptoServiceProvider 在尝试获取大于 300,000,000 的数字时无法通过卡方检验。 我尝试获取 0-1,000,000,000 范围内的随机数,结果卡
我正在使用 RNG 加密提供程序以真正天真的方式生成一定范围内的数字: byte[] bytes = new byte[4]; int result = 0; while(result max) {
在寻找生成真正随机数的最佳尝试时,我偶然发现了这个代码示例。 寻找关于这个片段的意见。 using System; using System.Security.Cryptography; privat
使用 System.Security.Cryptography.RNGCryptoServiceProvider 与 System.Random 的优缺点是什么。我知道 RNGCryptoServic
我使用以下代码生成 1000-9999 范围内的代码: Dim byt As Byte() = New Byte(1000) {} Dim rngCrypto As New RNGCryptoServ
RNGCryptoServiceProvider.GetBytes 线程安全吗?我似乎在文档中找不到任何关于它的注释。 最佳答案 是的。这是in the "remarks" section : The
我使用以下代码生成 1000-9999 范围内的代码: Dim byt As Byte() = New Byte(1000) {} Dim rngCrypto As New RNGCryptoServ
我在编码时看到了这个,觉得它很奇怪: 果然,MSDN表示 RNGCryptoServiceProvider(byte[] rgb) 和 RNGCryptoServiceProvider(string
通过 Rfc2898DeriveBytes.GetBytes() 运行由 RNGCryptoServiceProvider 生成的加密 key (2048 位)是否有意义,或者是 Rfc2898Der
我正在将一些 C# 代码转换为 Java。我找不到与 RNGCryptoServiceProvider 等效的方法。我该怎么做? private static String GetRandomSalt
根据 RandomNumberGenerator 的 MSDN 文档: Application code does not directly use this class. This abstract
桥牌游戏使用 52 张不同的扑克牌进行,这些牌随机分配给四名玩家,每名玩家最终得到 13 张牌:即所谓的“发牌”。 Roughly a little less than 2^96 Bridge dea
这是我的方法: public static string GenerateRandomString(int bytes) { var rng = new RNGCryptoServicePro
浏览一些密码学的东西,我看到 RNGCryptoServiceProvider 有 2 个方法: link RNGCryptoServiceProvider.GetNonZeroBytes 和 RNG
我正在使用这段代码生成给定长度的随机字符串 public string RandomString(int length) { const string valid = "abcdefghijk
我是一名优秀的程序员,十分优秀!