我使用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以某种方式写入文件吗?
答案 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类中,并在清理过程中使用它。