【发布时间】:2010-12-14 14:04:15
【问题描述】:
我正在编写一些创建文件的单元测试。
目前我正在使用TestContext TestResultsDirectory 来存储创建的文件(结果断言)。语法如下:
//Create directory
Directory.CreateDirectory(TestContext.TestResultsDirectory);
//Create file.
File.Create(TestContext.TestResultsDirectory + @"\Test.txt");
我的问题基本上是为什么没有创建TestResultsDirectory?
当我只调用File.Create 时,测试失败并显示DirectoryNotFoundException。
这是使用TestContext 的正确方法吗?或者是否有任何属性,例如[SetPath],我们可以在方法级别设置,以便运行时创建“测试相关”路径?
【问题讨论】:
-
从技术上讲,您并没有创建“单元测试”,因为单元测试是独立运行的,不与数据库、系统时钟和文件系统等外部资源进行通信。
-
从概念上讲是的,你是对的。测试是更新一个文本文件并确保它包含正确的文本。出于审计目的,我们必须确保“更改”存储在文件中。由于测试上下文是由运行时生成的,因此测试可以由任何开发人员运行(这是选择测试上下文的关键)。有点困惑为什么 test-context 只有指向不存在的目录的指针。
-
你在哪里搜索创建的目录?你试过 System.Console.WriteLine(Path.GetFullPath(Path.Combine(TestContext.TestResultsDirectory, "Test.txt"))) 吗?
-
我复制了 TestContext.TestResultsDirectory 属性内容并使用文件资源管理器进行了检查。此路径中有一个“Guid”目录名称。
-
当我在测试中创建文件时,我总是使用
File.Create()中的硬编码路径。我从不喜欢在测试中使用动态代码,因为我想确保每次运行测试时,我总是使用静态的、预期的值。我强烈建议创建一个临时文件夹,您可以将 txt 文件转储到该文件夹中,而不是使用动态运行时属性,例如 TestContext.TestResultsDirectory`。不过,这只是我的偏好,不是规则。
标签: unit-testing c#-4.0 mstest