良好的黄瓜在野外的例子?

几年前,我已经尝试了几个项目的黄瓜,并期待着再次尝试。 我真的不需要另一个“黄瓜开始”的文章。 相反,我想看到一些实际用途,其他黄瓜用户会考虑惯用和反模式。

所以,在你看来,大型项目中实际黄瓜规格的最好例子是什么?

你可以阅读散居的黄瓜testing。 这是一个非常大的项目,所以我认为你可以从中学到一些东西。

你可以阅读黄瓜本身的function,这些家伙应该知道他们在做什么:

https://github.com/cucumber/cucumber-ruby/tree/master/features

这不是一个直接的答案,但我不同意在你的问题的前提下,但有一个解决scheme,所以我会反正我的意见。

那么其他黄瓜用户会认为是惯用的和反模式的

我认为这个陈述不幸是不可能满足的。

以下是CollectiveIdea的Brandon Keepers采取共同立场, 您应该努力实现通用的,可重复使用的步骤 ,这从一般的“不要重复自己”的angular度来看是有意义的。

然而,黄瓜的作者AslakHellesøy也采取了一种普遍持有(但是相互排斥)的观点,认为你应该努力实现情景特定的步骤 ,这从“为什么黄瓜到底”的angular度来看是有意义的。

从上面链接的“培训车轮传出”中,Aslak提出了两个示例场景来对比两种风格: 可重复使用的步骤和特定场景 。

经过多年的使用黄瓜两种风格,并考虑到上述困境,这些是我的结论:

  1. 可重复使用的步骤成为维护的噩梦,因为您需要支持更复杂的步骤定义,同时避免命名冲突。
  2. 为了便于阅读和简化,特定于场景的步骤是首选,但由于命名冲突,也成为维护噩梦。

所以,我已经决定黄瓜目前已经坏了,在你最喜欢的unit testing框架之上,普通的水豚是最灵活的。

黄瓜可以,如果他们select,添加场景上下文,function特定的场景,场景命名空间等,这样你可以以某种方式 – 通过function,用户angular色,任何有意义的范围,你的场景,并大大减less命名冲突,使特定场景的步骤真正可行。 那时候,我认为会有一个明确的文体胜利者。 在那之前,总会有这样的紧张,需要抽象你的步骤来避免命名冲突,而不是为了简单和可读性而保持它们的特定场景。

试图解决这些缺点的另一个项目是菠菜 ,但该项目并不是那么活跃。 看看我的评论关于菠菜vs黄瓜的评价 。

我也在寻找黄瓜项目。 实际上在Cucumber的仓库中有一个wiki页面,里面有这样的项目列表( 不是所有的项目都在使用Cucumber ):

使用黄瓜的项目:

  • Gemcutter
  • Clearance /generators/clearance_features/templates/features/
  • WebJam /features/
  • Redcar /plugins/*/features
  • 珠宝商 /features
  • jekyll /features
  • CarrierWave /features/
  • RadiantCMS
  • OERPScenario(与OpenERP相关)
  • WontoMedia /features/
  • Rails目录
  • 肉汤
  • Heroku吊带
  • TimeFliesBy
  • 散居
  • 厨师

来源: https //github.com/cucumber/cucumber/wiki/Projects-Using-Cucumber

我build议:

https://github.com/teambox/teambox/tree/dev/features

更新:正如Ivailo Bardarov所提到的,他们使用的networking步骤目前是不好的做法。 只要看看这个作为参考,看到好的function,而不是步骤!

更新2:我觉得晚了,从跟随的对象在Rails书的付费版本提供的黄瓜function了解了很多。 源代码不是开源的,所以我不能在这里发布或者找不到链接。

我的首选方法是保持function语言接近域/业务语言,而不是特定的步骤或填写表单。 所以,而不是在我的function有这样的事情:

 When I fill in "Name" with "XYZ 

我会有我的function说:

 When I create a project: | name | | xyz | 

然后我的步骤将有,代码点击链接,parsing表格,并填写相关的表单域等

我们在当前项目中使用Cucumber来重新deviseWeb应用程序,但它不是开源的,所以我不能提供一组实际的function和步骤。

我会说我们受到这两个 样本中页面对象模式的严重启发。 我们正在用UX团队重构UI。 使用页面对象已经使testing适应这些变化非常简单。

我希望我可以从我们的企业回购(财富500强大型内部networking应用程序)。

在野外最好的可能是维基百科的testing:

https://github.com/wikimedia/qa-browsertests

你真的需要抽象的页面对象。 即使这样,当你的应用程序超过30个input屏幕,你的testing很难抽象。

我有一个快速抽象没有循环的共同path的实验方法; 应该清理它并将其作为一个拉请求发送给Cheezy: https : //github.com/cheezy/page-object

大项目的一个常见问题是黄瓜function需要花费很多时间来编写。

所以有很多策略:如果你使用Cucumber来描述遗留系统,你可以通过黄瓜和水豚获得相当不错的验收testing覆盖率,然后重构你的黄瓜步骤定义。

如果你正在进行unit testing,可以使用Cucumber来描述你的应用程序的快乐path,或者只是描述非常不幸的path。 获得与RSpec(或selectXunit)的覆盖面。

黄瓜的关键问题是function应该在很高的层次上描述function。 您需要使您的步骤定义变得干燥而且可重复使用,并且我是redirect步骤定义的粉丝,以保持利益相关者有趣的特性简明扼要。 虽然我认为这一点可能有点争议。