mat*_*lat 4 .net c# testing unit-testing testcontext
TestContext
这些是在class 及其各自的定义中定义的(未弃用的)目录。
DeploymentDirectory
ResultsDirectory
TestResultsDirectory
TestRunDirectory
TestRunResultsDirectory
我发现他们很模棱两可。每个目录都有一些可靠的示例用法吗?例如,如果我要测试文件 I/O,如果我想创建临时lorem ipsum文件,那么其中任何一个都可以吗?
为了回答你的问题,我从几个来源收集了信息:
\n\n(我相信第二个来源有一个错误,其中 和 的位置TestRunResultsDirectory
交换TestResultsDirectory
了。)
当 Visual Studio 执行测试时,会创建多个文件夹。
\n\n基础文件夹
\n\n测试基础文件夹使用以下模板命名:
\n\n\nTestResults\\Deploy_<用户名> <时间戳>\n\n\n
如果您在文件中指定安装和清理脚本.testsettings
,则此文件夹将包含这些脚本。该.testsettings
文件还允许您更改文件夹的名称。
输出文件夹
\n\n基本文件夹包含一个名为 的文件夹Out
。该Out
文件夹是实际的部署文件夹,测试运行开始时程序集和其他部署文件将复制到该文件夹。
如果您需要引用任何已部署的文件,则应该使用此文件夹。
\n\n在文件夹中
\n\n代码覆盖率结果和某些其他测试结果存储在In
位于基本文件夹中的指定文件夹中。
如果使用该方法将文件添加到测试结果中TestContext.AddResult()
,则该文件应存储在该文件夹中。(我自己还没有验证这一说法,因为测试结果是在使用 Microsoft 测试管理器和 TFS 构建期间存储的;而不是在 Visual Studio 中运行测试时存储的。)
在 \\<计算机名称> 文件夹中
\n\n将创建计算机特定文件夹作为该In
文件夹的子文件夹。如果您需要在测试运行期间创建临时文件,则应该使用此文件夹。
下面的表格解释了TestContext
属性如何映射到上述文件夹:
\n属性 | 值\n----------------------------------------+----- --------------------\nTestRunDirectory | 基本文件夹\nDeploymentDirectory | Out 文件夹\nResultsDirectory、TestResultsDirectory | 在文件夹\nTestRunResultsDirectory | 中 计算机特定的文件夹中\n\n\n
如果所有测试均成功,则默认情况下会删除这些文件夹。要更改此行为,您可以将.runsettings
包含以下内容的文件添加到您的解决方案中:
<RunSettings>\n <MSTest>\n <DeleteDeploymentDirectoryAfterTestRunIsComplete>False</DeleteDeploymentDirectoryAfterTestRunIsComplete>\n </MSTest>\n </RunSettings>\n
Run Code Online (Sandbox Code Playgroud)\n\n要实际使用此.runsettings
文件,您必须在 Visual Studio 2015 中使用以下菜单选项:测试>测试设置>选择测试设置文件。如果您使用的是 ReSharper 单元测试运行程序,则可以在 ReSharper 选项对话框中的工具>单元测试> MsTest中设置设置。
\n\n\n[...] 如果我要测试文件 I/O,如果我想创建临时lorem ipsum文件,其中任何一个都可以吗?
\n
是的,您应该用于TestRunResultsDirectory
临时文件。实际上,我认为在 Visual Studio 中进行单元测试时您应该能够使用这些文件夹中的任何一个。但是,在进行远程测试和收集诊断数据时,使用此文件夹可能很重要。
我一直在思考我觉得令人困惑的In
和Out
名称。但是,如果您假设测试控制器的角度,则将测试部署到Out
(测试控制器输出)并且当测试完成时从文件夹(测试控制器输入)收集结果是有意义的In
。当然,这纯粹是我的猜测。