Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
测试打印功能是否工作(C)_C - Fatal编程技术网

测试打印功能是否工作(C)

测试打印功能是否工作(C),c,C,我正在尝试制作一个主函数,它将测试一大堆其他函数,以确保它们正常工作。也就是说,如果它们包含bug,则返回1,如果没有bug,则返回0 假设我尝试测试的函数之一如下: void list_print(list_t*list); 这应该以“人类可读的形式”打印一个列表,从第一个元素到最后一个元素,在花括号之间 现在,我自然可以简单地打印一个数组,并亲自查看它的外观,但我需要这样做,以便它是自动的,即如果打印函数打印准确,则返回0,否则返回1 我该怎么做(以一种一般的方式)?我一直在谷歌上搜索,找

我正在尝试制作一个主函数,它将测试一大堆其他函数,以确保它们正常工作。也就是说,如果它们包含bug,则返回1,如果没有bug,则返回0

假设我尝试测试的函数之一如下:

void list_print(list_t*list);
这应该以“人类可读的形式”打印一个列表,从第一个元素到最后一个元素,在花括号之间


现在,我自然可以简单地打印一个数组,并亲自查看它的外观,但我需要这样做,以便它是自动的,即如果打印函数打印准确,则返回0,否则返回1


我该怎么做(以一种一般的方式)?我一直在谷歌上搜索,找不到答案。

我建议您使用
freopen
setbuf
stdout
重定向到内存中的缓冲区,如中所述。然后,运行
list\u print
方法

然后,您可以将缓冲区的内容与预期看到的内容进行比较。您可以对这一步严格要求,也可以使用启发式方法来尝试确定一个可接受的普遍接受的输出模式

我不认为有更好的方法“查看”终端的输出,除了非便携操作系统特定的库


如果您发布了您的工作尝试,那么我可以通过一个具体的代码示例来帮助您。

我建议您使用
freopen
setbuf
stdout
重定向到内存中的缓冲区,如中所述。然后,运行
list\u print
方法

然后,您可以将缓冲区的内容与预期看到的内容进行比较。您可以对这一步严格要求,也可以使用启发式方法来尝试确定一个可接受的普遍接受的输出模式

我不认为有更好的方法“查看”终端的输出,除了非便携操作系统特定的库


如果您发布了您的工作尝试,那么我可以通过一个具体的代码示例来帮助您解决更多问题。

作为这类测试问题的一般答案:在给定的固定输入上运行一次,然后检查结果。如果它“看起来正确”,那么您编写一个测试,每次提供完全相同的输入,并盲目地将输出与预期输出进行比较,预期输出是您“手动”验证的输出,它“看起来正确”。这将防止函数实现中出现回归

您可以进一步添加一些测试用例(空列表、列表中的一个条目、更多条目等),然后为每个用例编写一个类似的测试。这些是“预期结果”测试,测试不知道“看起来正确”是什么意思,但它只是验证给定输入的输出是“预期”的,并且没有偏离。编写测试的人员会验证输出本身是否“正确”,并在编写和接受测试时手动添加“预期输出”

另一种选择是,您必须编写逻辑来解析输出,可能是一个完整的词法分析器和语法,并真正验证输出。为此,您需要非常精确地定义什么输出是“正确的”,并为其编写适当的测试解析器。如果功能足够重要,这是一个有价值的目标,但这似乎不是你的情况


顺便说一句,不要编写“如果函数有bug,则返回1”的函数,而是使用a并将其作为构建阶段添加到项目中。

作为此类测试问题的一般答案:在给定的固定输入上运行一次,然后检查结果。如果它“看起来正确”,那么您编写一个测试,每次提供完全相同的输入,并盲目地将输出与预期输出进行比较,预期输出是您“手动”验证的输出,它“看起来正确”。这将防止函数实现中出现回归

您可以进一步添加一些测试用例(空列表、列表中的一个条目、更多条目等),然后为每个用例编写一个类似的测试。这些是“预期结果”测试,测试不知道“看起来正确”是什么意思,但它只是验证给定输入的输出是“预期”的,并且没有偏离。编写测试的人员会验证输出本身是否“正确”,并在编写和接受测试时手动添加“预期输出”

另一种选择是,您必须编写逻辑来解析输出,可能是一个完整的词法分析器和语法,并真正验证输出。为此,您需要非常精确地定义什么输出是“正确的”,并为其编写适当的测试解析器。如果功能足够重要,这是一个有价值的目标,但这似乎不是你的情况


顺便说一句,不要编写“如果函数有bug,则返回1”的函数,而是使用a并将其作为构建阶段添加到您的项目中。

您试图实现什么wrt
list\u print
?向我们展示您编写的代码?是否要检查
列表中的元素是否以人类可读的形式打印?“即,如果打印函数打印准确,则返回0,否则返回1。”准确打印意味着什么?!我建议提供一个例子。这真的很模糊。我不知道我是否理解你的问题。是否要测试打印功能并查看它是否输出您期望的输出?如果是这样的话,那么您就不能真正“看到”终端输出,但是您可以使用
freopen
setbuf
stdout
重定向到内存中的一个缓冲区,并将其与您预期的输出进行比较。您尝试实现了哪些wrt
list\u print
?向我们展示您编写的代码?是否要检查
列表中的元素是否以人类可读的形式打印?“即,如果打印函数打印准确,则返回0,否则返回1。”准确打印意味着什么?!我建议提供一个例子。这真的很模糊,我知道