你能回顾一下我对 Cucumber 的 Perl 重写吗?

Posted

技术标签:

【中文标题】你能回顾一下我对 Cucumber 的 Perl 重写吗?【英文标题】:Can you review my Perl rewrite of Cucumber? 【发布时间】:2009-03-13 11:53:30 【问题描述】:

我们公司有一个团队致力于 X11 GUI 应用程序的验收测试,他们创建了一个巨大的验收测试框架来驱动 GUI 以及运行场景。

该框架是使用 Perl 5 编写的,与验收测试相比,场景文件看起来更像是非常复杂的 Perl 程序(具有过程编程风格的数千行代码)。

我最近学习了 Ruby 的 Cucumber,并且通常已经使用 Ruby 很长时间了。但不幸的是,我不能只用 Ruby 来取代 Perl,因为编写所有这些的人并不了解 Ruby,而且他们肯定不会想要“这种”中断。

所以为了让 Ruby 的 Cucumber 更接近他们的工作,我使用 Perl 5 重写了它。不幸的是,我真的不是 Perl 程序员,并且很想获得代码审查并听取既了解 Perl 又了解 Perl 的人的建议黄瓜。

您好 Perl/Cucumber *** 用户 - 请帮助我创建这个“开源”尝试为 Perl 重新创建 Cucumber!我很想听听你们的 cmets 并会接受任何可接受的帮助。

最小的源代码在这里:

http://github.com/kesor/p5-cucumber

感谢您的关注。

对于那些不熟悉黄瓜的人 - 请花一点时间来看看这个小页面:http://cukes.info/

【问题讨论】:

如果你告诉 Perl 的人什么是黄瓜会很有帮助。 BDD/Cucumber 用户是否真的编写了这些自定义转换器(在您的示例中为 p5-cucumber.pl)以将程式化的纯文本场景转换为测试代码? 我已经阅读了所有的 github 代码,它看起来很可靠。我对解析器很感兴趣。 我很好奇你会说这与 cpan 上的 Test::Cukes 相比如何? search.cpan.org/~gugod/Test-Cukes-0.09/lib/Test/Cukes.pm 看起来与 Test::Cukes 所做的非常相似,也许它的做法有所不同 - 但最终结果才是最重要的。尽管 T:C 示例将场景和代码结合在一起 - 这不是最初的黄瓜作者打算这样做的重点。 【参考方案1】:

您可能会在Perlmonks 上得到很好的帮助。该网站专门针对此类帖子,而 *** 更多的是关于直接和可回答的问题。

祝你好运,:)

【讨论】:

【参考方案2】:

在 Perl 上有一个相当完整的 Cucumber 实现,形式为 Test::BDD::Cucumber。

【讨论】:

【参考方案3】:

你能回顾一下我的 Perl 重写 黄瓜?

回答:是的。

我已阅读您发布的 github 代码。它看起来很不错。

我很好奇 Parser::Parser.yp::ERROR 中的以下 sn-p。为什么你选择使用“and do ”而不是“if( ) ”?风格?范围?其他的?

  exists $parser->YYData->ERRMSG
  and do 
    print $parser->YYData->ERRMSG;
    delete $parser->YYData->ERRMSG;
    return;
  ;

我没有使用过 Cucumber,并且仍在尝试围绕使用模型进行思考。有人会如何验证/运行您的计算器示例?

如果您计划将代码发布到 CPAN(并且应该),那么您需要将此 git 源代码捆绑到可安装的 tarball 中。您需要包含其中一个模块安装工具:ExtUtils::MakeMaker、Module::Build 等。我最近开始使用Dist::Zilla,并且对它非常满意。它让我克服了释放我的第一个 cpan 模块的激活能量。

Dist::Zilla 20 秒游览:

    下载并安装 Dist::Zilla 及其要求(有 很多,因为它是仅供开发人员使用的工具) 在顶部创建一个 dist.ini 文件 您的包裹级别('dzil new MyPackage') 运行 “dzil 测试”、“dzil 构建”和“dzil” 发布',测试,(构建和测试), (构建、测试和发布)

见Dist::Zilla::Tutorial

【讨论】:

感谢您的意见,您可能已经猜到我上次更新它已经有一段时间了。关于解析器的使用,我很确定我是从某个示例中复制的——因为我真的不记得为什么我选择这样做了。我记得有两个分支,一个非常基本的解析器的主分支,一个允许更多功能的更复杂的实验。运行示例就是这样,“p5-cucumber example_dir”,该目录包含场景+测试代码。【参考方案4】:

Test::A8N 是否符合您的要求?

如果没有,CPAN 上还有很多其他 Test:: 模块可以满足您的需求。

【讨论】:

看起来不错,但真的不是黄瓜。而且我仍然在代码中使用 Test:: 模块......只是将测试代码与实际故事(用简单的英语编写)分开。测试代码可以使用它想要实际“测试”条件的任何框架。 Test::A8N 基于 Ward Cunningham 的 FIT (fit.c2.com)。 CPAN 上还有其他 Test::FIT* 模块,其中 Test::FITesque 是 Test::A8N 构建在上面的。 Cucumber 似乎是 Test::A8N / FIT 可以做的一个子集......所以你可以用它作为 p5-cucumber 的基础。 实际上 cucumber 是 FIT 的超集,因为它既支持 FIT 的表格表示法,也支持更自然的自然语言表示法。 我需要更仔细地研究 Cucumber ;-) 查看 Piers Cawley (bofh.org.uk),因为他最近提到他最近正在考虑在 Perl 中做“像黄瓜一样的东西”(@987654326 @)

以上是关于你能回顾一下我对 Cucumber 的 Perl 重写吗?的主要内容,如果未能解决你的问题,请参考以下文章

geckodriver 没有为 selenium-cucumber-js 下载

如何在 Eclipse 中安装和设置 Cucumber jar 文件以进行 WebDriver 测试

如何在 Eclipse 中使用 Gradle 运行 Cucumber + Spring Boot 应用程序

使用 ZombieJS 的 Cucumber.js 场景中的回调问题

如何使用cucumber搭建ui自动化框架

测试兵器谱のCucumber-JVM框架篇