在野外有很好的黄瓜例子吗?

| 几年前,我已经尝试了Cucumber的几个项目,并希望再次尝试。我真的不需要另一篇“开始黄瓜”文章。取而代之的是,我想看看野外的一些实际用法,一个是其他Cucumber用户会认为是惯用且没有反模式的。 那么,您认为大型项目中实际黄瓜规格的最佳示例是什么?     
已邀请:
您可以阅读侨民的黄瓜测试。这是一个很大的项目,所以我认为您可以从中学到一些东西。     
您可以阅读Cucumber本身的功能,这些家伙应该知道他们在做什么: https://github.com/cucumber/cucumber-ruby/tree/master/features     
这不是直接的答案,但我不同意您提出问题的前提,但有解决方案,因此无论如何我都会给出我的意见。   其他黄瓜用户会考虑使用惯用且无反图案的 我认为,这一声明令人遗憾地无法实现。 这里的Brandon Keepers of CollectiveIdea采取了通常的立场,即您应该朝着通用的,可重复使用的步骤努力,这从一般的“不要重复自己”的角度来看是有意义的。 但是,这里是Cucumber的作者AslakHellesøy,他也持有一种普遍(但互斥)的观点,即您应该努力进行针对特定场景的步骤,这从“为什么要使用Cucumber? ” 从上面链接的“训练轮退出”中,Aslak给出了两个示例方案,以鲜明地对比这两种样式:可重用步骤与特定于方案。 经过多年在两种样式中使用Cucumber并考虑到以上难题,这些是我的结论: 可重复使用的步骤成为维护的噩梦,因为您需要支持更复杂的步骤定义,同时还要避免命名冲突。 特定于场景的步骤是易读性和简化性的首选,但由于命名冲突,它们也成为维护的噩梦。 因此,我确定Cucumber当前已损坏,并且在您喜欢的单元测试框架之上的普通Capybara是最灵活的。 如果黄瓜选择了,它们可以添加方案上下文,特定功能的方案,方案名称空间等,以便您可以按某种方式对方案进行范围划分(按功能,用户角色,只要有意义),并极大地减少命名冲突,以进行特定于方案的步骤真正可行。到那时,我认为将会有明显的风格赢家。在此之前,始终存在这样的压力:需要抽象化您的步骤来避免命名冲突,以及为了简化和易读而希望针对特定情况进行处理。 试图解决这些缺点的另一个项目是Spinach,但是该项目并不是那么活跃。在这里查看我对菠菜与黄瓜的评价。     
我也在寻找黄瓜项目。实际上,Cucumber的存储库上有一个Wiki页面,其中包含此类项目的列表(尽管并非所有项目仍在使用Cucumber): 使用黄瓜的项目: 宝石切割机 间隙
/generators/clearance_features/templates/features/
Web果酱
/features/
雷德卡
/plugins/*/features
珠宝商
/features
杰基尔
/features
载波波
/features/
RadiantCMS OERPS场景(链接到OpenERP) WontoMedia
/features/
Rails目录 肉汤 Heroku吊带裤 时光飞逝 散居 厨师 来源:https://github.com/cucumber/cucumber/wiki/Projects-Using-Cucumber     
我建议: https://github.com/teambox/teambox/tree/dev/features 更新:正如Ivailo Bardarov所提到的,他们使用websteps,这是目前的不良做法。只是将此作为参考,以了解良好的功能而不是步骤! 更新2:我认为是后期,我从Object on Rails的付费版本提供的黄瓜功能中学到了很多东西。源代码不是开源的,因此我无法在此处发布或找不到指向它的链接。 我的首选方法是使要素语言与领域/业务语言保持一致,而不是使特定的步骤或填写表单。因此,在我的功能中不要像这样:
When I fill in \"Name\" with \"XYZ
我的功能会说:
When I create a project:
| name |
| xyz  |
然后,我的步骤将具有单击链接,解析表并填写相关表单字段等的代码。     
我们正在当前项目中使用Cucumber进行Web应用程序重新设计,但是它不是开源的,因此我无法提供一组实际的功能和步骤。 我要说的是,这两个示例中的“页面对象”模式极大地启发了我们。没有UX小组,我们正处于繁重的UI重构之中。使用Page Objects使测试适应这些更改变得相当简单。     
我希望我可以从我们的公司仓库(《财富》 500强的大型内部网络应用程序)中发布这些内容。 最好的可能是Wikipedia的测试: https://github.com/wikimedia/qa-browsertests 您确实需要使用页面对象进行抽象。即使这样,当您的应用程序超过30个输入屏幕时,您的测试也很难抽象。 我有一种实验方法,可以快速抽象出没有循环的通用路径;应该可能将其清理并作为拉取请求发送给Cheezy:https://github.com/cheezy/page-object     
大型项目的一个常见问题是Cucumber功能需要花费很多时间来编写。 因此,涉及许多策略: 如果您使用黄瓜来描述旧系统,则可以通过黄瓜和水豚获得不错的验收测试覆盖率,然后重构您的黄瓜步骤定义。 如果单元测试正确,请使用Cucumber仅描述应用程序的满意路径,或仅描述必要的不满意路径。使用RSpec(或选择的Xunit)获得覆盖。 Cucumber的关键问题在于,这些功能应该以很高的层次描述功能。您需要将步骤定义设置为DRY并且可重用,并且我喜欢重定向步骤定义,以使涉众感兴趣的功能简洁明了。尽管我认为这一点可能会引起争议。     

要回复问题请先登录注册