如何使用Perl测试C程序?

时间:2009-09-13 05:42:38

标签: perl testing automated-tests

我正在寻找一些教程,展示如何通过编写Perl程序来自动化测试来测试C程序。

基本上我想学习Perl程序的自动化测试。任何人都可以分享这些教程或你的任何经验,这可以帮助我启动这个过程吗?

5 个答案:

答案 0 :(得分:10)

Perl测试通常使用TAP。有几个C libraries for TAP。观看此Perl testing presentation

答案 1 :(得分:2)

你应该用chromatic和Ian Langworth来看Perl Testing: A Developer's Notebook

我一直有意购买副本,但到目前为止我只是在perlmongers会议上浏览过它。但它似乎是你想要的东西。


<强>更新

嗯,这表明我应该阅读这个问题 - 用Perl测试C程序,而不是用Perl测试Perl程序。

这本书可能仍然有用(因为你可能应该编写测试脚本并使用Test::More和朋友)但是如果采用这种方法,你需要编写一组Perl函数来控制你的C.基本上

sub run_my_c_program {
    my @args=@_;

    #Set up test environment according to @args

    system "my-c-program";

    # Turns restults into a $rv data structure

    return $rv;
}

然后以与普通Perl测试相同的方式检查$rv

is_deeply(run_my_c_program(...),
          { .. what I think it returns ..}, 
          ".. description of what I'm testing ..");

答案 2 :(得分:2)

如果你想开始学习如何使用Perl测试外部程序,首先要学习使用Perl来测试Perl位。 Test::More模块是一个很好的起点。一旦理解了这一点,查看Test::*上的所有其他CPAN模块,看看其中一个模块是否做了你需要做的事情。

如果您有特定问题,请询问相关问题。对于任何人来说,这个问题实在太宽泛,无法提供有用的答案。

答案 3 :(得分:1)

我没有教程,但我曾经是一个测试C ++编译器的测试团队。我们使用的测试工具(自酿)是用perl编写的,它为我们工作了很多年。 Perl非常理想,因为我们可以轻松地使用它来调用工具来构建程序,捕获输出以便以后插入我们的测试日志(使用“反引号”来运行编译器。例如:$ compilerOutput =`cl - ?` ; ),然后,如果构建成功,运行测试程序并捕获它们的输出,再次插入我们的测试日志。

使用Perl获得的其他好处:

  • 对于通过/失败检测,Perl的正则表达式支持很有帮助。
  • 我们的程序(编译器)在其生命周期中被移植到许多不同的硬件架构中。由于Perl源是可用的并且在C中,我们可以在C编译器可用时立即在新架构上运行perl(这通常是在汇编器之后的新环境中实现的第一种语言)。
  • 大量文档,书籍和帮助。

-Ron

答案 4 :(得分:0)

我写了一篇关于Testing C with Libtap的文章,该文章使用Perl的Test :: Harness来测试C程序。这是一个示例项目:https://github.com/stig/libggtl/tree/master/t - 可能不再构建,因为深奥的构建系统可能不存在,但您应该能够弄清楚它是如何工作的: - )