【问题标题】:Directory disappears after test concludes测试结束后目录消失
【发布时间】:2019-12-09 17:06:34
【问题描述】:

我正在尝试将 UnitTest 的输出放在 智能 位置,以便我可以:

  • 多次运行测试并覆盖或创建新结果
  • 查找我创建的结果/跟踪/日志文件
  • 避免硬编码路径

建议似乎是使用 TestContext (https://docs.microsoft.com/en-us/dotnet/api/microsoft.visualstudio.testtools.unittesting.testcontext?view=mstest-net-1.2.0)。我的单元测试正确地填充了这个对象;我在调试时可以看到。

我已尝试写入多个文件,结果令人沮丧

写入测试目录中的文件

            string fileOutput = Path.Combine(m_testContext.TestDir, "readmeBasic.txt");
            using (System.IO.StreamWriter file = new System.IO.StreamWriter(fileOutput))
            {
                file.WriteLine("Basic Data");
                ...
            }

编写跟踪消息

            m_testContext.WriteLine("Test Directory " + m_testContext.TestDir);

当我执行我的代码时,我可以看到 readmeBasic.txt 出现。在执行单元测试期间使用记事本++,即使经过几个WriteLine 语句,文件也会显示为空。在成功、无错误地执行我的单元测试后,包含该文件的目录将被删除(通过 Visual Studio ???)。

  • 是否缺少我的配置?
  • 哪里有解释为什么这个目录被删除的文档?
  • 如果这些信息是暂时的并且会被删除,那么在 m_testcontext 中提供这些信息有什么意义?

Visual Studio 2019 16.3.9

【问题讨论】:

    标签: c# visual-studio unit-testing


    【解决方案1】:

    是的,测试运行时默认会删除deployment文件夹

    成功了。

    如果要保存文件夹,可以创建一个runsettings文件,然后将“DeleteDeploymentDirectoryAfterTestRunIsComplete”设置为false,测试运行后配置会保留部署文件夹。

    请按照this doc创建运行设置文件,然后输入以下代码:

    另外,“Testcontext”是用来获取运行测试的一些信息,比如测试名称,测试结果等。testcontext.writeline会写入测试输出,输入到trx文件,所以你可以需要使用 file.writeline() 来记录 trace 消息。

    顺便说一句,你可以参考这个关于记录当前 TestMethod 和结果的示例:

    [TestCleanup]
        public void LogResult()
        {
    
            var testOutcome = TestContext.CurrentTestOutcome;
            string testName = TestContext.TestName;
            string testdir = Path.Combine(TestContext.TestDir,"log.txt");
    
            string str = testName + ": " + testOutcome.ToString() + "\n";
    
            using (System.IO.StreamWriter file = new System.IO.StreamWriter(testdir))
            {
                file.WriteLine(str);
                file.WriteLine("Basic Data");
            }
        }
    
        public TestContext TestContext
        {
            get { return testContextInstance; }
            set { testContextInstance = value; }
        }
    
        private TestContext testContextInstance;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-02
      • 2019-11-18
      相关资源
      最近更新 更多