0

我遇到了在 NCrunch 下测试变得不稳定的问题。看起来它与一些影子复制问题有关。我的测试是这样的

class SaveViewSettings : ISaveSettings
{
    public void SaveSettings()
    {
        Properties.View.Default.Save();
    }
}

[TestFixture]
// ReSharper disable once InconsistentNaming
class SaveViewSettings_Should
{
    [Test]
    public void Save_Settings()
    {
        var ctx = Properties.View.Default;
        var sut = new SaveViewSettings();

        ctx.LeftSplitter = 12.34;
        sut.SaveSettings();
        ctx.Reload();
        ctx.LeftSplitter.Should().Be(12.34);
    }
}

使用ctx.Reload()i重新加载设置时

System.Configuration.ConfigurationErrorsException : ... 
----> System.Configuration.ConfigurationErrorsException...
(C:\...\AppData\Local\Remco_Software_Ltd\nCrunch.TestRunner.AppDom_Url_q2piuozo0uftcc2pz5zv15hpilzfpoqk\[version]\user.config...)

大约3个月前在NCrunch论坛上提出了类似的问题:Unrecognized configuration section userSettings

4

1 回答 1

0

在使用应用程序设置处理多个解决方案时,您可能会在使用 NCrunch 时遇到类似的错误。

我认为这可能会归结为 NCrunch 在影子构建时始终使用相同的产品和用户名,以便所有配置设置都映射到相同的user.config文件路径。

似乎到目前为止还没有已知的解决方案。一种解决方法是手动删除用户配置

%LOCALAPPDATA%\Remco_Software_Ltd\nCrunch.TestRunner.AppDom_...\user.config`.

请注意,执行此操作的通常方法也可能会失败,因此您确实必须使用ConfigurationManagerctx.Reset()找到并删除user.config自己。

我通过添加以下代码来自动化这项工作,该代码使用 NCrunch 稳定测试

[Test]
public void Save_Settings()
{
#if NCRUNCH
    // Every once in a while NCrunch throws ConfigurationErrorException, cf.:
    // - http://forum.ncrunch.net/yaf_postsm7538_Unrecognized-configuration-section-userSettings.aspx
    // - http://www.codeproject.com/Articles/30216/Handling-Corrupt-user-config-Settings
    // - http://stackoverflow.com/questions/2903610/visual-studio-reset-user-settings-when-debugging
    // - http://stackoverflow.com/questions/9038070/how-do-i-get-the-location-of-the-user-config-file-in-programmatically
    var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal);
    if (File.Exists(config.FilePath))
        File.Delete(config.FilePath);
#endif
    ...

在过去的几年里,我开始将 .NET 配置设置视为一种遗留功能。它是在 .NET 2.0 中引入的,当时非常棒,但它有一些您需要注意的问题。也许寻找替代方案或抽象是一个好主意,例如HumbleConfig,它可以轻松切换。

于 2015-10-31T08:17:17.713 回答