配置设置使NCrunch的测试不稳定

时间:2015-10-31 08:17:18

标签: nunit ncrunch

我在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()重新加载设置时,我会

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

1 个答案:

答案 0 :(得分:0)

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

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

现在似乎没有已知的解决方案。解决方法是手动删除

中的用户配置
%LOCALAPPDATA%\Remco_Software_Ltd\nCrunch.TestRunner.AppDom_...\user.config`.

请注意,执行此操作的常用方法ctx.Reset()也可能会失败,因此您必须使用ConfigurationManager自行查找并删除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,可以轻松切换。