ProtectSection强制保存

时间:2014-03-10 19:07:01

标签: c# .net integration-testing

如何强制以下代码被下面的测试命中?

if (!section.SectionInformation.IsProtected)
{
     section.SectionInformation.ProtectSection(encryptionProvider);
}

问题是其他测试在下面的测试之前调用Encrypt,所以代码永远不会进入上面的语句。

到目前为止,测试中的力量节省似乎没有做任何事情。

[TestCategory("Integration"), TestMethod]
public void TestProtectSectionOnlyHappensOnce() // integration test
{
    // Arrange
    IAppConfigEncryptor encryptor = new AppConfigEncryptor();
    bool expected = false;
    bool actual;

    // Act
    try
    {
        Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
        var section = config.GetSection("appSettings");
        section.SectionInformation.SetRawXml("");
        config.Save(ConfigurationSaveMode.Full, true);

        encryptor.Encrypt("appSettings", "DataProtectionConfigurationProvider");
        encryptor.Encrypt("appSettings", "DataProtectionConfigurationProvider");
        actual = false;
    }
    catch (NullReferenceException)
    {
        actual = true;
    }

    // Assert
    Assert.AreEqual(expected, actual);
}

1 个答案:

答案 0 :(得分:0)

我会使用单独的配置文件,以便测试不会干扰。由于所有测试都是独立的。

  1. 方法OpenMappedExeConfiguration允许您打开非默认配置文件。
  2. 您可以向项目添加第二个配置文件,并使用DeploymentItem属性自动将其复制到测试目录。