【问题标题】:MSTest : Writing Unit Tests with TestContextMSTest : 使用 TestContext 编写单元测试
【发布时间】: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


【解决方案1】:

我知道这是一个旧线程,但我现在自己也在学习这些东西,我只是在玩 Visual Studio 自动化测试时偶然发现了你关于 TestResultsDirectory 文件夹的问题的答案。也许它会帮助别人。

TestResultsDirectory 创建的,只是没有测试期间。 (@Kevin,名称的 GUID 与是否可以创建文件夹无关,如果这就是你的意思的话。)我在测试运行时跟踪了文件和文件夹的创建,文件夹是直到用户代码退出后才创建。

在运行捕获屏幕视频 (ScreenCapture.wmv) 或创建操作日志 (UITestActionLog.html) 的测试时,结果文件将放置在 TestResultsDirectory创建后,直到您的代码完成之后。如果您的测试没有创建这些或类似的结果文件,则很可能不会创建此文件夹。

正如我所说,我仍在学习 Visual Studio 测试。

更新:我发现在录制视频或操作日志时,它们似乎会存储在内存中,直到测试完成。这似乎是用户代码退出后创建输出文件夹的原因。

如果我找到有关此主题的更多信息(如果网站允许我 - 您可以多次编辑答案吗?),我会更新此答案。

【讨论】:

    【解决方案2】:

    我从不使用 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。
    【解决方案3】:

    您可能想改用TestContext.ResultsDirectory。这似乎指向一个实际创建的目录。

    TestContext.TestResultsDirectory 没有被创建(它在路径中有 GUID 文件夹),这就是你得到DirectoryNotFoundException 的原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-26
      • 2014-08-06
      • 1970-01-01
      • 2014-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多