背景:
在我正在开发的应用程序上,我正在使用 Visual Studio 2015、SpecFlow 和 ReSharper 2016.3 的混合体编写测试(我将其缩写为 R#,因为我很懒。)
我正在处理的应用程序基于模板发送 HTML 格式的电子邮件,这些电子邮件存储在 HTML 文件中,这些文件在 Visual Studio 2015 中设置为始终复制。
问题:
当我尝试运行测试时,出现以下异常:
System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Users\[Me]\AppData\Local\JetBrains\Installations\ReSharperPlatformVs14_001\Resources\SomeEmailTemplate.html`
该目录不是我正在处理的项目的输出目录,所以我仔细检查了我的 R# 设置,并确认 Shadow Copy 已关闭。非常清楚,我的 R# Shadow Copy 复选框确实未选中。
有问题的代码非常简单。TestContext.CurrentContext.TestDirectory
由于应用程序本身需要此代码,因此我不能、不应该、甚至不想做正常的补救措施。将测试框架代码放在被测应用程序中是合适的。
public class HtmlTemplateLog : ISectionedLog, IRenderableLog
{
#region Variables / Properties
private readonly string _rawHtml;
private readonly Dictionary<string, StringBuilder> _sectionDictionary = new Dictionary<string, StringBuilder>();
private StringBuilder _workingSection;
#endregion Variables / Properties
#region Constructor
public HtmlTemplateLog(string templateFile)
{
// This is specifically what breaks the tests.
_rawHtml = File.ReadAllText(templateFile)
.Replace("\r\n", string.Empty); // Replace all newlines with empty strings.
}
#endregion Constructor
#region Methods
// Methods work with the section dictionary.
// The RenderLog method does a string.Replace on all section names in the HTML.
// These methods aren't important for the question.
#endregion Methods
如下例所示:
_someLog = new HtmlTemplateLog("Resources/SomeEmailTemplate.html");
// ...code...
_someLog.WriteLineInSection("{someSection}", "This is a message!");
string finalHtml = _someLog.RenderLog();
问题:
1. 我在 R# 测试中关闭了 Shadow Copy。为什么这还在做影子副本?
2. 鉴于这不是测试代码,因此我可以通过哪些方式解决 R# 不尊重 Shadow Copy 复选框的事实,因此通常适用于测试代码的补救措施不适用于这种情况?