最近发现由于未指定InvariantCulture何时将文本解析为数字而导致的错误后,我想加强我们的单元测试,以便他们能够发现问题。我编写了一个新测试,将当前区域性更改为具有不同数字格式的区域性,重新运行现有测试方法之一,然后将区域性设置回来。不幸的是,文化的变化也影响了其他测试方法。有没有办法做到这一点,使测试不相互作用?
我确实发现将文化设置测试放在文件的最后可以“解决”问题,但我讨厌依赖测试顺序,因为它不能得到保证。在下面的示例中,系统文化为"en-EN"、TestMethod1和 的情况下TestMethod2,如果单独运行,将会成功。如果我一起运行所有方法,它们都会失败。
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethodGerman()
{
var originalCulture = Thread.CurrentThread.CurrentCulture;
Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");
TestMethod1();
Thread.CurrentThread.CurrentCulture = originalCulture;
}
[TestMethod]
public void TestMethod1()
{
double value = Double.Parse("3.00");
Assert.AreEqual(value, 3.0);
}
[TestMethod]
public void TestMethod2()
{
double value = Double.Parse("4.00");
Assert.AreEqual(value, 4.0);
}
}
Run Code Online (Sandbox Code Playgroud) 我想导入使用 CngKey.Export(CngKeyBlobFormat.EccPrivateBlob) 导出的密钥,为该密钥命名,并将其保留在密钥存储中。这应该很简单,但我还没有找到任何方法来做到这一点。
我可以使用 CngKey.Create 创建一个命名密钥,并将其保存到密钥存储中,以便稍后可以通过 CngKey.Open 使用它。如果我使用正确的选项创建它,我可以使用 CngKey.Export 将密钥导出为 EccPrivateBlob 并将其存储在文件中。稍后,我可以从文件中读回这些字节,并使用如下所示的调用来重新导入密钥:
CngKey key = CngKey.Import(keyBytes,
CngKeyBlobFormat.EccPrivateBlob);
Run Code Online (Sandbox Code Playgroud)
这是成功的,但它产生了一个未命名的临时密钥。如何像使用 Create 那样为密钥提供名称,以便导入的密钥将存储在密钥存储中?
我正在寻找一种方法来存档 ECDsa 签名密钥,然后将其恢复到其他用户或 PC。我不想让私有 blob 闲置并每次都导入它 - 我希望管理员仅导入它一次并将其安全地锁定在密钥存储中。