使用 gcovr Linux 和 perl 的自动覆盖测试 C 程序
Automated Coverage Testing C Program using gcovr Linux with perl
我想测试 2 个 C 程序来检查它的覆盖率(行覆盖率和分支覆盖率)。
我在 linux 系统中使用 gcovr。
为此,我编写了一个 Perl 脚本,它将调用 gcc
编译器并从文件中读取输入,然后测试 C 程序的覆盖率。
我有许多以文件形式提供给 C 程序的测试套件,我正在使用 Perl 自动输入并使用 gcovr
获得覆盖率。
当然,我已经使用 system
命令和 perl 中的反义词来调用 gcc
和 gcovr
。
第一个 C 程序运行良好,因为程序的输入是从给定的参数中读取的。
但是对于第二个C程序,我感到困惑,因为该程序只接受键盘输入或简单地输入"it is using scanf
"。
那么,我们如何通过终端 linux 或使用带有 system
命令的 perl 向仅接受键盘输入 (scanf
) 的 C 程序提供输入?
scanf
接受来自 stdin
的输入。您可以在启动程序时将 stdin
重定向到一个文件,并让程序从该文件获取输入。
重定向是 OS 的一项功能,而不是特定语言的一项功能。
假设您想启动您的程序,并且您知道该程序将接受“10”'y' 和 'n' 作为输入。您所要做的就是以任何方式创建一个包含这些行的文件。假设此文件名为 test_1.
然后您使用 tested_program < test_1
启动程序,程序将使用“10”、'y' 和 'n' 作为其输入。
如果使用 Perl 命令 system
不是严格要求,您可以考虑使用 Open3。它比系统更高级,您可以指定 STDIN、STDOUT 和 STDERR 使用什么。因此,您可以将输入写入文本文件中的 C 程序,创建该文件的句柄,然后使用 Open3 调用您的 C 程序,将该文件句柄指定为第一个参数。
我想测试 2 个 C 程序来检查它的覆盖率(行覆盖率和分支覆盖率)。
我在 linux 系统中使用 gcovr。
为此,我编写了一个 Perl 脚本,它将调用 gcc
编译器并从文件中读取输入,然后测试 C 程序的覆盖率。
我有许多以文件形式提供给 C 程序的测试套件,我正在使用 Perl 自动输入并使用 gcovr
获得覆盖率。
当然,我已经使用 system
命令和 perl 中的反义词来调用 gcc
和 gcovr
。
第一个 C 程序运行良好,因为程序的输入是从给定的参数中读取的。
但是对于第二个C程序,我感到困惑,因为该程序只接受键盘输入或简单地输入"it is using scanf
"。
那么,我们如何通过终端 linux 或使用带有 system
命令的 perl 向仅接受键盘输入 (scanf
) 的 C 程序提供输入?
scanf
接受来自 stdin
的输入。您可以在启动程序时将 stdin
重定向到一个文件,并让程序从该文件获取输入。
重定向是 OS 的一项功能,而不是特定语言的一项功能。
假设您想启动您的程序,并且您知道该程序将接受“10”'y' 和 'n' 作为输入。您所要做的就是以任何方式创建一个包含这些行的文件。假设此文件名为 test_1.
然后您使用 tested_program < test_1
启动程序,程序将使用“10”、'y' 和 'n' 作为其输入。
如果使用 Perl 命令 system
不是严格要求,您可以考虑使用 Open3。它比系统更高级,您可以指定 STDIN、STDOUT 和 STDERR 使用什么。因此,您可以将输入写入文本文件中的 C 程序,创建该文件的句柄,然后使用 Open3 调用您的 C 程序,将该文件句柄指定为第一个参数。