使用带有perl的gcovr Linux进行自动覆盖测试C程序

时间:2015-12-31 04:57:34

标签: c linux perl gcov gcovr

我想测试2个C程序来检查它的覆盖范围(线路覆盖范围和分支覆盖范围)。

我在linux系统中使用gcovr。

为此,我编写了一个Perl脚本,它将调用gcc编译器并从文件中读取输入,然后测试C程序的覆盖范围。

我有许多以C程序文件形式提供的测试套件,我使用Perl自动输入并使用gcovr获取覆盖率。

我当然使用system命令和perl中的backtics来调用gccgcovr

第一个C程序运行良好,因为程序的输入是从给定的参数中读取的。

但是对于第二个C程序,我感到很困惑,因为程序只接受来自键盘的输入或只是放置"它正在使用scanf"。

那么,我们如何为仅通过终端linux接受键盘输入(scanf)或使用带system命令的perl接受输入的C程序提供输入?

2 个答案:

答案 0 :(得分:0)

scanf接受来自stdin的输入。您可以在启动程序时将stdin重定向到文件,并让程序从该文件中获取输入。

重定向是操作系统的一项功能,而不是特定语言的功能。

假设您要启动程序,并且您知道此程序将接受'10''y'和'n'作为输入。您所要做的就是以任何方式创建包含这些行的文件。我们假设这个文件名为test_1。

然后用tested_program < test_1启动程序,程序将使用'10','y'和'n'作为输入。

答案 1 :(得分:0)

如果使用Perl命令system不是严格要求,则可以考虑使用Open3。它比系统更先进,您可以指定STDIN,STDOUT和STDERR使用的内容。因此,您可以在文本文件中将输入写入C程序,创建该文件的句柄,并使用Open3调用您的C程序,将该文件句柄指定为第一个参数。