提问人:Akito The Duck 提问时间:5/10/2023 最后编辑:Akito The Duck 更新时间:5/10/2023 访问量:52
C++写入.log文件在单元测试项目中不起作用
C++ writing into .log file doesn't work in unit test project
问:
我正在使用 Visual Studio、C++、sqlapi 和 Microsoft C++ 单元测试框架。
我在我的主项目中编写了一个简单的方法,用于在异常出现时将一些错误写入.log文件。当我捕获 SAException 时,该方法正在调用。
void LogException(const SAException& e)
{
auto now = system_clock::now();
auto now_c = system_clock::to_time_t(now);
stringstream ss;
ss << put_time(localtime(&now_c), "%Y-%m-%d %H:%M:%S") << "\n" << (const char*)e.ErrText() << "\n\n";
ofstream logfile("exceptions.log", ios_base::app);cout << put_time(localtime(&now_c), "%Y-%m-%d %H:%M:%S") << "\n" << (const char*)e.ErrText() << "\n\n";
logfile << ss.str();
logfile.close();
}
就我只在 Visual Studio 中运行项目而言,一切都很好,.log文件得到了一些文本。现在,我正在使用第二个项目和Microsoft C++单元测试框架,并对我的方法进行一些单元测试。当我现在运行测试时,.log文件没有获得新条目,但测试本身一如既往地工作正常。
一种测试方法,其中.log文件应获取新条目。
TEST_METHOD(openConnnectionException)
{
myDb->initParameter("dsn", "user", "pw", "client", "db");
Assert::IsTrue(myDb->openConnection() == -1);
}
openConnection() 方法
int openConnection()
{
try
{
//trying to open the connection
}
catch (SAException& sae)
{
cout << "Error opening database. Check parameters or contact an administrator\n";
LogException(sae);
return -1;
}
};
我的代码将通过 catch 块和 LogException() 方法为我提供正确的返回值,但.log文件仍然没有获得新条目。有人知道为什么它不起作用?
答:
0赞
nvoigt
5/10/2023
#1
在这种特定情况下,我猜您的单元测试是在不同的路径中运行的,这就是为什么当您在 IDE 中运行该文件时,该文件将存在于不同的目录中。
也就是说,单元测试不应写入文件。对于测试的异常,您应该有一个不同的处理程序,您可以断言该处理程序,以便您的测试实际上可以说“这应该生成一个日志条目”。这意味着您需要一种方法来在每次测试中写入一个容器。可能是内存中的存储,例如列表/向量或其他可以查询的东西。
下一个:异常 c 中的消息模板#
评论