【问题标题】:Visual Studio Native Testing: Writing to a file after all tests have runVisual Studio 本机测试:在所有测试运行后写入文件
【发布时间】:2017-07-27 19:35:41
【问题描述】:

我使用 Visual Studio 2015 的 CppUnitTestFramework 对我的 C++ 代码运行大量测试,这些测试正在运行。但是,在所有测试都运行之后,我想将一些结果写入文件。我通过 TEST_CLASS_CLEANUP 尝试了以下方法:

TEST_CLASS_CLEANUP(CleanUp) {
  std::ofstream outFile("compare.html");
  outFile << "<!DOCTYPE html><html><head><meta charset=\"utf-8\"/></head><body><table>";

  //Write some stuff to outFile
  ...

  outFile << "</body></html>" << std::endl;
  outFile.close();
}

但是,文件“compare.html”不是在任何地方创建的。当我改用 TEST_METHOD_CLEANUP 时,它正在工作,但在每次测试后都会写入,这不是故意的。那么,我可以从 TEST_CLASS_CLEANUP 以某种方式写入文件吗?

【问题讨论】:

  • 听起来你应该试试 TEST_CLEANUP 之类的东西
  • @ChristopherGallé 就像我写的那样,类的清理方法,即 TEST_CLASS_CLEANUP 不起作用。我还尝试了模块清理 TEST_MODULE_CLEANUP ,它也不起作用。剩余的清理 TEST_METHOD_CLEANUP 工作正常,但在每次测试后运行。不存在简单的 TEST_CLEANUP。
  • 您的项目中有名为“CleanUp”的测试类吗?
  • @ChristopherGallé 我的测试类默认命名为UnitTest1,CleanUp是清理方法的名称,看这里:msdn.microsoft.com/en-us/library/…

标签: c++ visual-studio unit-testing visual-studio-2015


【解决方案1】:

是的,你可以。实际上,您的代码可以正常工作并创建一个文件。见例子:

TEST_CLASS(Example)
{
public:
    TEST_METHOD(ExampleTest)
    {
        // A test
    }

private:
    TEST_CLASS_CLEANUP(ExampleCleanUp) 
    {
        std::ofstream outFile("compare.html");
        outFile << "<!DOCTYPE html><html><head><meta charset=\"utf-8\"/></head><body><table>";

        outFile << "</body></html>" << std::endl;
        outFile.close();
    }
};

【讨论】:

  • 我刚刚尝试了您的代码示例并将其复制到新的本机单元测试中。不幸的是,结果保持不变,在我的情况下没有文件出现。但是很高兴知道代码应该可以工作,即使在我的情况下它不能工作。不幸的是,我不知道什么会影响文件的写入。
【解决方案2】:

我知道这可能为时已晚,但你的问题的答案是可以,但是。

Visual Studio 2017 CE 中的以下实验:

TEST_CLASS_INITIALIZE(ClassInitialize)
    {
        Logger::WriteMessage("In Test Dir Listing Class Initialize");
        Logger::WriteMessage(std::experimental::filesystem::current_path().string().c_str());
        ... 
    }

给出以下输出:

[dd.mm.2020 00:00:14 信息] 在测试目录列表类初始化 [dd.mm.2020 00:00:14 信息] C:\Users\user_name\source\repos\UnitTest1\Debug

所以您正在调试器工作目录中初始化测试,但是 Cleanup 类中的相同日志记录

TEST_CLASS_CLEANUP(ClassCleanup)
        {
            Logger::WriteMessage("In Test Dir Listing Class Cleanup");
            Logger::WriteMessage(std::experimental::filesystem::current_path().string().c_str());
            ...
        }

导致:

[dd.mm.2020 00:00:15 信息] 在测试目录中列出类清理 [dd.mm.2020 00:00:15 信息] F:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE

即Cleanup 类的工作目录不是通常期望看到的。

因此,如果您想将数据写入某个特定文件,您应该安排适当的完整路径规范。或者将工作路径保存在类 Initialization 中,并在清理过程中使用。

【讨论】:

    猜你喜欢
    • 2015-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-16
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多