所有测试运行后,Visual Studio本地测试:写入文件

Visual Studio Native Testing: Writing to a file after all tests have run

本文关键字:测试 文件 Studio 测试运行 Visual      更新时间:2023-10-16

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

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

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信息]在测试dir列表中初始化[dd.mm.2020 00:00:14信息]

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

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信息]在测试dir列表中清理[dd.mm.2020 00:00:15信息]

即。班级清理的工作目录通常不是一个人可以期望的。

因此,如果要将数据写入某些特定文件,则应安排适当的完整路径规范。或将工作路径保存在课堂初始化中并在清理过程中使用。