为测试用例捕获系统日志

Capture syslog for test cases

我正在用 C++ 编写一个命令行工具,它根据 --logfile 参数记录到 syslog 或给定文件。我想测试这个功能(使用 googletest)。

为了测试文件部分,我 运行 带和不带 --logfile 参数的 MyApp::main() 函数,并测试日志消息是否出现在文件中。

有没有办法对 syslog 进行同样的测试?我可以阅读 /var/log/syslog 并希望最好,但这不是很便携,因为许多系统将 syslog 保留在其他地方。

我使用的 logging library 不提供模拟功能,所以这不是一个选项。他们在内部使用对 syslog 守护程序 (man(3) syslog) 的调用。有没有一种可移植的方法从这个守护进程中获取 syslog?还是来自其他地方?

I'm using a logging library that doesn't offer mocking,

所以在某些时候你正在调用正在写入系统日志的库函数。这是你嘲笑需要发生的地方。在 X 条件下,库函数 get 使用以下参数调用一次...分机。

一般我在测试中发现,当你遇到A -> B -> C的情况时,其中A是你正在编写的代码,B是第三方库,C是输出,你可以只测试你是否适当地与 B 交互,不能测试 C。

当使用第三方代码块时,您基本上相信它会按照它说的去做(除非它是开源的并且您为他们的代码库编写测试)。

您可以使用库预加载 (LD_PRELOAD) 使您的程序在您提供的库而不是系统 syslog 中调用 syslog。然后,您的实施可以记录到您可以随后检查的受您控制的文件。