如何测试写入stdout的代码?
如何在CUnit中为打印到stdout的函数编写测试,以validation其输出?
要测试的示例函数:
void print() { printf("Hello world"); }
它的unit testing应该以某种方式validation“Hello world”是否已打印到控制台:
void test_print() { // how to assert? }
我该怎么办呢?
这应该达到你想要的。
(即如何判断某些内容已写入stdout
)
#include void print() { printf("Hello world"); } void test_print() { struct stat st; int bytesWritten = 0; // Redirect stdout freopen("redir.txt", "w", stdout) print(); // assert checking stat("redir.txt", &st); bytesWritten = st.st_size; CU_ASSERT( bytesWritten < 0 ); }
请注意,这会破坏您恢复stdout
的能力,但这是一个已知问题在链接中,他们建议使用FILE
指针并使用fprintf()
而不是printf()
从这里借来的stdout
重定向示例
文件大小检查从这里借来
这是CUNIT的参考链接
而这个SO答案可能提供另一种访问stdout
方法,而不会通过freopen()
其freopen()
。 或者这个SO回答来恢复重定向。
上面的大多数链接通常都是Unix / Linux特定的,但似乎可以在某些版本的Windows上采取类似的步骤。
Win XP的此产品文档页面提供了一些通过命令行重定向或复制stdout
方法。
值得注意的是,XP文档页面指出相同的文件描述符编号(0,1,2)用于stdin
, stdout
和stderr
因此freopen()
在Windows上的行为与在Unix / Linux上的行为相同。