Visual Studio本机测试:在所有测试运行后写入文件

时间:2017-03-07 14:32:18

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

我使用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();
}

然而,文件&#34; compare.html&#34;没有在任何地方创建。当我使用TEST_METHOD_CLEANUP时,它正在工作,但在每次测试后写入,这不是预期的。那么,我可以从TEST_CLASS_CLEANUP以某种方式写入文件吗?

2 个答案:

答案 0 :(得分:0)

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

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();
    }
};

答案 1 :(得分:0)

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

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 Informational] In Test Dir Listing Class Initialize
[dd.mm.2020 00:00:14 Informational] C:\Users\user_name\source\repos\UnitTest1\Debug

因此,您正在调试器工作目录中初始化测试,但是 清除类中的日志记录相同

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 Informational] In Test Dir Listing Class Cleanup
[dd.mm.2020 00:00:15 Informational] F:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE

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

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