MSTest:使用TestContext编写单元测试
我正在编写一些创建文件的单元测试。MSTest:使用TestContext编写单元测试
此刻我正在使用TestContext
TestResultsDirectory存储创建的文件(结果为断言)。语法是这样的:
//Create directory
Directory.CreateDirectory(TestContext.TestResultsDirectory);
//Create file.
File.Create(TestContext.TestResultsDirectory + @"\Test.txt");
我的问题主要是,为什么不创建TestResultsDirectory
?
当我刚打电话File.Create
,测试失败DirectoryNotFoundException
。
这是使用TestContext
的正确方法,还是有任何属性,如我们可以在方法级别设置的[SetPath]
,以便运行时将创建“测试相关”路径?
我从不使用TestContext。在这种情况下,我会用Environment.CurrentDirectory代替:
//Create directory
Directory.CreateDirectory(Path.Combine(Environment.CurrentDirectory, "SubDirectory"));
//Create file.
File.Create(Path.Combine(Environment.CurrentDirectory, "Test.txt"));
我刚刚清理了一些使用相同模式(当前目录)的测试用例,并最终在根文件夹中创建了文件夹。我正在使用Visual Studio 2010。 – vboctor 2011-10-19 17:38:04
你可能想使用TestContext.ResultsDirectory
代替。这似乎指向实际获得创建的目录。
TestContext.TestResultsDirectory
没有被创建(它在路径中有GUID文件夹),这就是为什么你得到DirectoryNotFoundException
。
我知道这是一个古老的线程,但我现在只是自己了解这些东西,而我只是在玩Visual Studio自动测试时偶然发现了关于TestResultsDirectory
文件夹的问题的答案。也许它会帮助别人。
TestResultsDirectory
是创造,只是期间的测试不。 (@Kevin,名称的GUID与是否可以创建文件夹无关,如果这就是你所暗示的。)我在测试运行时遵循文件和文件夹的创建,并且文件夹是在用户代码退出后才能创建,直到。
当运行使得画面的视频被捕获的测试(ScreenCapture.wmv
)或行为日志创建(UITestActionLog.html
),导致文件被放置在TestResultsDirectory
已经创建,这是不是你的代码完成后,直到后。如果您的测试不会创建这些或类似的结果文件,则很可能不会创建此文件夹。
正如我所说,我仍然在学习Visual Studio测试。
更新:我发现在录制视频或动作日志时,他们似乎将存储在内存中,直到测试结束。这似乎是在用户代码退出后创建输出文件夹的原因。
如果我找到更多关于这个主题的信息(如果网站允许我 - 你能不止一次编辑答案?),我会更新这个答案。
从技术上讲,您并未创建'单元测试',因为单元测试是独立运行的,并且不与外部资源(如数据库,系统时钟和文件系统)通信。 – Steven 2010-12-14 14:10:09
概念上是的,你是对的。测试是更新一个文本文件,并确保它包含正确的文本。为了审计目的,我们必须确保“更改”存储在文件中。由于测试上下文是由运行时生成的,测试可以由任何开发人员运行(这是选择测试上下文的关键)。有点困惑为什么测试环境只有指向不存在的目录的指针。 – msuhash 2010-12-14 14:18:25
你在哪里搜索创建的目录?你有没有尝试System.Console.WriteLine(Path.GetFullPath(Path.Combine(TestContext.TestResultsDirectory,“Test.txt”)))? – k3b 2010-12-14 14:56:04