这里的这篇文章帮助我弄清楚我需要做什么,而无需手动将项目添加到.testsettings
文件中。
第 1 步 - 启用 MS 测试DeploymentItem
属性。
首先,我们需要打开/启用该DeploymentItem
属性。
转到TEST -> EDIT TEST SETTINGS -> Current Active settings .. 例如 :: Local (local.testsettings)
现在转到DEPLOYMENT并确保Enable Deployment被勾选。(默认情况下,它是关闭的)。
第 2 步 - 检查文件的属性
现在我们需要确保您希望在单元测试中使用的文件已设置为在编译时复制到 BIN 目录。只有 BIN 目录中的文件才能在 MS Test 单元测试中使用。为什么?因为每次运行 MS 测试时,它都必须复制源代码……这意味着它会复制当前 BIN 目录文件(用于当前配置)。
例如...当前配置是调试(相对于发布)。
然后我添加我的文件...(记下项目中的文件夹结构)...
然后确保在编译项目时始终将此文件复制到 bin 目录。
专业提示:始终复制也可以,但始终将源文件复制到目标文件上……即使它们相同。这就是为什么我更喜欢 Copy if Newer ...但无论你的船如何漂浮
好的女士们,先生们——还和我在一起吗?维基。
当我们编译时,该文件现在应该存在于 Bin 目录中......
第 3 步 - 现在使用 DeploymentItem 属性
好的,现在我们终于可以DeploymentItem
在代码中使用该属性了。当我们这样做时,这会告诉 MSTest 将文件(从相对于 bin 目录的位置)复制到新的 MS Test 目录...
[TestMethod]
[DeploymentItem(@"Test Data\100LogEntries.txt", "Test Data")]
public void Parsing100LogFileEntriesReturnsANewParsedLogEntriesWith100Items()
{
// Arrange.
const string fileName = @"Test Data\100LogEntries.txt";
ILogEntryService logEntryService = new PunkBusterLogEntryService();
// Act.
var parsedLogEntries = logEntryService.ParseLogFile(fileName, 0);
// Assert.
Assert.IsNotNull(parsedLogEntries);
Assert.AreEqual(100, parsedLogEntries.LogEntries.Count);
// Snipped the remaining asserts to cut back on wasting your time.
}
所以让我们分解一下..
[TestMethod]
我们都知道那是什么。
[DeploymentItem(@"Test Data\100LogEntries.txt", "Test Data")]
从 bin 目录开始,进入Test Data
文件夹并将文件复制100LogEntries.txt
到目标文件夹Test Data
中,在 MS Test 运行每个测试时创建的根 MS Test 输出目录中。
所以这就是我的输出文件夹结构的样子(请原谅所有的混乱)。
瞧!我们有部署文件,以编程方式。
专业提示 #2 - 如果您不在DeploymentItem
属性中使用第二个字符串参数,则文件将被复制到当前 MS 测试的根 OUT 文件夹中。
const string fileName = @"Test Data\100LogEntries.txt";
现在文件的路径是相OUT
对于当前 MS 测试的文件夹的。因此,我明确表示将文件部署到名为Test Data
... 的目录中,因此当我想读取文件时,我需要确保在代码中正确引用该文件。
只是为了确认 -> 该文件名的完整路径被转换为类似C:\lots of blah blah blah\My Solution\TestResults\PureKrome_PUREKROME-PC 2011-01-05 23_41_23\Out\Test Data
.. 的内容,用于当前的 MS 测试。