如何解决在野外有很好的黄瓜例子吗?
| 几年前,我已经尝试了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并且可重用,并且我喜欢重定向步骤定义,以使涉众感兴趣的功能简洁明了。尽管我认为这一点可能会引起争议。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。