C# 测试结束后目录消失

C# 测试结束后目录消失,c#,visual-studio,unit-testing,C#,Visual Studio,Unit Testing,我试图将单元测试的输出放在智能位置,以便: 多次运行测试并覆盖或创建新结果 查找我创建的结果/跟踪/日志文件 避免对路径进行硬编码 建议使用TestContext()。我的单元测试正确地填充了这个对象;我可以在调试时看到这一点 我试着写了几个文件,结果令人沮丧 写入测试目录中的文件 string fileOutput = Path.Combine(m_testContext.TestDir, "readmeBasic.txt"); using

我试图将单元测试的输出放在智能位置,以便:

  • 多次运行测试并覆盖或创建新结果
  • 查找我创建的结果/跟踪/日志文件
  • 避免对路径进行硬编码
建议使用TestContext()。我的单元测试正确地填充了这个对象;我可以在调试时看到这一点

我试着写了几个文件,结果令人沮丧

写入测试目录中的文件

            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

是,测试运行时默认情况下将删除部署文件夹

成功

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

请按照以下步骤创建运行设置文件,然后键入以下代码:

此外,“Testcontext”用于获取运行测试的一些信息,如测试名称、测试结果等。Testcontext.writeline将写入测试输出,然后输入到trx文件,因此您可能需要使用file.writeline()来记录跟踪消息

顺便说一句,您可以参考此示例,了解如何记录当前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;