This post here 帮助我弄清楚我需要做什么,而无需手动将项目添加到 .testsettings 文件中。
第 1 步 - 启用 MS 测试 DeploymentItem 属性。
首先,我们需要打开/启用DeploymentItem 属性。
转到 测试 -> 编辑测试设置 -> 当前活动设置 .. 例如 :: Local (local.testsettings)
现在转到部署并确保启用部署被勾选。 (默认情况下,它是关闭的)。
第 2 步 - 检查文件的属性
现在我们需要确保您希望在单元测试中使用的文件已设置为在编译时复制到 BIN 目录。只有 BIN 目录中的文件才能在 MS Test 单元测试中使用。为什么?因为每次运行 MS 测试时,它都必须复制源代码……这意味着它会复制当前 BIN 目录文件(用于当前配置)。
例如... 当前配置是 Debug(与 Release 相对)。
然后我添加我的文件...(记下项目中的文件夹结构)...
然后确保在编译项目时始终将此文件复制到 bin 目录。
专业提示:始终复制也可以,但始终将源文件复制到目标文件上……即使它们相同。这就是为什么我更喜欢 Copy if Newer ...但whatever floats your boat
好的女士们先生们 - 还和我在一起吗?维基。
当我们编译时,该文件现在应该存在于 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";
现在文件的路径相对于当前 MS 测试的 OUT 文件夹。因此,我明确表示要将文件部署到一个名为Test Data 的目录中......所以当我想读入文件时,我需要确保在我的代码中正确引用它。
只是为了确认 -> 对于当前的 MS 测试,该文件名的完整路径被转换为 C:\lots of blah blah blah\My Solution\TestResults\PureKrome_PUREKROME-PC 2011-01-05 23_41_23\Out\Test Data 之类的东西。