TestContext 定义的目录的目的是什么?

What is the purpose of directories defined by TestContext?

这些是 TestContext class 和 their respective definitions.

中定义的(未弃用的)目录

DeploymentDirectory

ResultsDirectory

TestResultsDirectory

TestRunDirectory

TestRunResultsDirectory

我觉得他们很模棱两可。每个目录是否有一些可靠的示例用法?例如。如果我要测试文件 I/O 如果我想创建一个临时 lorem ipsum 文件,其中任何一个都可以吗?

为了回答您的问题,我从以下几个来源收集了信息:

(我相信第二个来源有一个错误,其中 TestRunResultsDirectoryTestResultsDirectory 的位置被交换了。)

当 Visual Studio 执行测试时,会创建几个文件夹。

基本文件夹

测试基础文件夹使用此模板命名:

TestResults\Deploy_<user name> <timestamp>

如果您在 .testsettings 文件中指定设置和清理脚本,则此文件夹包含这些脚本。 .testsettings 文件还允许您更改文件夹的名称。

输出文件夹

基本文件夹包含一个名为 Out 的文件夹。 Out 文件夹是实际的部署文件夹,当测试 运行 开始时程序集和其他部署文件将复制到该文件夹​​。

如果您需要引用任何已部署的文件,您应该使用此文件夹。

文件夹中

代码覆盖率结果和某些其他测试结果存储在基础文件夹中名为 In 的文件夹中。

如果您使用TestContext.AddResult()方法将文件添加到测试结果中,则该文件应存储在该文件夹中。 (我自己还没有验证这个声明,因为测试结果是在使用 Microsoft 测试管理器和 TFS 构建期间存储的;而不是在 运行 在 Visual Studio 中测试时。)

在\<机器名>文件夹中

机器特定文件夹创建为 In 文件夹的子文件夹。如果您需要在测试期间创建临时文件 运行,您应该使用此文件夹。

这里有一个 table 解释了 TestContext 属性如何映射到上述文件夹:

Property                               | Value
---------------------------------------+---------------------------
TestRunDirectory                       | Base folder
DeploymentDirectory                    | Out folder
ResultsDirectory, TestResultsDirectory | In folder
TestRunResultsDirectory                | Machine specific In folder

如果所有测试都成功,则默认删除文件夹。要更改此行为,您可以将 .runsettings 文件添加到您的解决方案中,其中包含以下内容:

<RunSettings>
    <MSTest>
        <DeleteDeploymentDirectoryAfterTestRunIsComplete>False</DeleteDeploymentDirectoryAfterTestRunIsComplete>
    </MSTest>
 </RunSettings>

要实际使用此 .runsettings 文件,您必须在 Visual Studio 2015 中使用以下菜单选择:Test > Test设置 > Select 测试设置文件。如果您使用的是 ReSharper 单元测试 运行ner,则在 Tools > Unit Testing > 中设置设置ReSharper 选项对话框中的 MsTest

[...] if I were to test file I/O would any of those be OK if I wanted to create a temporary lorem ipsum file?

是的,您应该对临时文件使用 TestRunResultsDirectory。实际上,我认为在 Visual Studio 中进行单元测试时,您应该能够使用这些文件夹中的任何一个。但是,在进行远程测试和收集诊断数据时,使用此文件夹可能很重要。


我一直在考虑 InOut 这两个名字,但我觉得很困惑。但是,如果您假设测试控制器的视角,那么将测试部署到 Out(测试控制器输出)是有意义的,并且当测试完成时,从 In 文件夹(测试控制器)收集结果输入)。当然,这纯粹是我的猜测。