如何在CUnit中为打印到stdout的函数编写测试,以验证其输出?
要测试的示例函数:
void print()
{
printf("Hello world");
}
Run Code Online (Sandbox Code Playgroud)
它的单元测试应该以某种方式验证"Hello world"是否已打印到控制台:
void test_print()
{
// how to assert?
}
Run Code Online (Sandbox Code Playgroud)
我该怎么办呢?
小智 17
这应该达到你想要的.
(即如何判断某事被写入stdout)
#include <sys/stat.h>
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 );
}
Run Code Online (Sandbox Code Playgroud)
请注意,这会破坏您的恢复能力stdout,但这是一个已知问题 在链接中,他们提出了一种使用FILE指针的方法,fprintf()而不是使用printf()
stdout从这里借来的重定向示例
文件大小检查从这里借来
而这个SO答案可能提供另一种访问方式,stdout而不会破坏它freopen().或者这个SO回答来恢复重定向.
上面的大多数链接通常都是Unix/Linux特定的,但似乎可以在某些版本的Windows上采取类似的步骤.
Win XP的"产品文档"页面提供了一些stdout通过命令行重定向或复制的方法.
值得一提的是,XP文档页面指出,同样的文件描述符数字(0,1,2)用于stdin,stdout以及stderr因此freopen()应该具有相同的行为在Windows因为它在Unix/Linux.
| 归档时间: |
|
| 查看次数: |
3672 次 |
| 最近记录: |