使用gcovr-Linux和perl自动测试C程序的覆盖率
我想测试2C程序来检查它的覆盖率(行覆盖率和分支覆盖率) 我在linux系统中使用gcovr 为此,我编写了一个Perl脚本,它将调用使用gcovr-Linux和perl自动测试C程序的覆盖率,c,linux,perl,gcov,gcovr,C,Linux,Perl,Gcov,Gcovr,我想测试2C程序来检查它的覆盖率(行覆盖率和分支覆盖率) 我在linux系统中使用gcovr 为此,我编写了一个Perl脚本,它将调用gcc编译器并从文件中读取输入,然后测试C程序的覆盖率 我有许多以文件形式提供给C程序的测试套件,我使用Perl自动化输入,并使用gcovr获得覆盖率 当然,我使用了system命令和perl中的backtics来调用gcc和gcovr 第一个C程序运行良好,因为程序的输入是从给定的参数读取的 但对于第二个C程序,我感到困惑,因为该程序只接受来自键盘的输入,或者简
gcc
编译器并从文件中读取输入,然后测试C程序的覆盖率
我有许多以文件形式提供给C程序的测试套件,我使用Perl自动化输入,并使用gcovr
获得覆盖率
当然,我使用了system
命令和perl中的backtics来调用gcc
和gcovr
第一个C程序运行良好,因为程序的输入是从给定的参数读取的
但对于第二个C程序,我感到困惑,因为该程序只接受来自键盘的输入,或者简单地说“它正在使用scanf
”
那么,我们如何向C程序提供输入,这些程序只能通过终端linux接受键盘(
scanf
)的输入,或者使用带有system
命令的perl?scanf
接受stdin
的输入。启动程序并让程序从该文件获取输入时,可以将stdin重定向到文件
重定向是操作系统的一项功能,而不是特定语言的一项功能
假设您要启动程序,并且您知道此程序将接受“10”“y”和“n”作为输入。你所要做的就是创建一个包含这些行的文件,不管你用什么方法。假设该文件名为test_1
然后用
tested\u程序
启动程序,程序将使用“10”、“y”和“n”作为输入。scanf
接受来自stdin
的输入。启动程序并让程序从该文件获取输入时,可以将stdin重定向到文件
重定向是操作系统的一项功能,而不是特定语言的一项功能
假设您要启动程序,并且您知道此程序将接受“10”“y”和“n”作为输入。你所要做的就是创建一个包含这些行的文件,不管你用什么方法。假设该文件名为test_1
启动程序后,使用代码> TESTEDDY程序< Test1 1/代码>,程序将使用“10”、“y”和“n”作为输入。
< P>如果使用Perl命令<代码>系统< /> >不是严格要求,则可以考虑使用。它比系统更高级,您可以指定STDIN、STDOUT和STDERR的用法。因此,您可以在文本文件中写入C程序的输入,创建该文件的句柄,并使用Open3调用C程序指定文件句柄为第一个参数。 < P>如果使用Perl命令<代码>系统< /C>不是严格要求,则可以考虑使用。它比系统更高级,您可以指定STDIN、STDOUT和STDERR的用法。因此,您可以将输入写入文本文件中的C程序,创建该文件的句柄,并使用Open3调用C程序,将该文件句柄指定为第一个参数。您能在回答中提供一些示例代码吗?我是Perl新手。也许寻找示例代码会对我有所帮助。:)仅供参考,C程序无法更新或修改。我只能用Perl脚本测试它。你能在回答中提供一些示例代码吗?我是Perl新手。也许寻找示例代码会对我有所帮助。:)仅供参考,C程序无法更新或修改。我只能用Perl脚本来测试它。我是Perl新手,请在答案中加入一些示例代码,以供参考。C程序无法修改或更新。我只是想用perl测试一下。我是perl新手,请在回答中加入一些示例代码,以供参考。C程序无法修改或更新。我只是想用perl测试一下。