gpt4 book ai didi

c - 丢弃由 glib 测试测试的函数输出的更好方法

转载 作者:行者123 更新时间:2023-11-30 17:33:38 27 4
gpt4 key购买 nike

如果我使用 glib 的 testharness 测试函数,我总是面临一个丑陋的事实,即我正在测试的函数的输出与 glib 函数的输出混合在一起。这段代码:

#include <stdlib.h>
#include <glib.h>
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>

void to_test(void)
{
printf("this function is being tested");
}

void test_to_test(void)
{
to_test();
}

int main(int argc, char *argv[])
{
g_test_init(&argc, &argv, NULL);

g_test_add_func("/test", test_to_test);

return g_test_run();
}

生成:

/test: this function is being testedOK

我发现的唯一解决方案是在调用函数时将 standardout/-err 的文件描述符重定向到/dev/null 并在之后重置它们,例如:

void test_to_test(void)
{
int backup, new;
new = open("/dev/null", O_WRONLY);
backup = dup(STDOUT_FILENO);
dup2(new, STDOUT_FILENO);
to_test();
fflush(stdout);
close(new);
dup2(backup, STDOUT_FILENO);
}

输出看起来符合预期:

/test: OK

不幸的是,这种方法 1.) 丑陋,2.) POSIX 特定。所以我的问题是:有没有其他方法可以做到这一点,以便代码可移植,同时具有美观吸引力?

提前致谢!

属于你永无休止、美丽、超然的爱弗洛索

最佳答案

这可以使用freopen和/或fdopen实现。不幸的是,没有跨平台的方法可以做到这一点,幸运的是 Windows 有一个 fdopen 等效项,您可以使用它 ( Is there a Windows equivalent to fdopen for HANDLEs? )。

请注意,这仅在使用 stdio 时才有效。如果由于某种原因直接写入 fd,它将不起作用

作为长期建议,为什么不使用 fprintf 来代替呢?并在结构中维护一个FILE*字段,该字段可以定向到自定义输出或任何地方。

关于c - 丢弃由 glib 测试测试的函数输出的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23698395/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com