我在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
答案 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,可以轻松切换。