几年前我曾尝试过Cucumber的一些项目,我希望再给它一次。我真的不需要另一篇“Beginning Cucumber”文章。相反,我希望看到其他Cucumber用户考虑惯用和反模式的野外实际用途。
那么,在您看来,大型项目中实际黄瓜规格的最佳例子是什么?
答案 0 :(得分:34)
您可以阅读diaspora's黄瓜测试。这是一个非常大的项目,所以我认为你可以从中学到一些东西。
答案 1 :(得分:15)
你可以阅读黄瓜本身的特征,这些人应该知道他们在做什么:
https://github.com/cucumber/cucumber-ruby/tree/master/features
答案 2 :(得分:9)
这不是一个直接的答案,但我不同意你的问题中的一个前提但有一个解决方案,所以无论如何我都会给出我的意见。
其他Cucumber用户会考虑惯用和反模式
我认为,这句话很难令人满意。
这里的CollectiveIdea的Brandon Keepers采取了you should strive towards generic, reusable steps的共同立场,这从一般的“不要重复自己”的角度来看是有意义的。
然而,这里是Cucumber的作者AslakHellesøy采取了一种普遍持有(但相互排斥)的意见,you should strive towards scenario-specific steps,从“为什么选择黄瓜?”的角度来看是有意义的。
从上面链接的“训练车轮起飞”中,Aslak制作了两个示例场景,对两种风格形成鲜明对比:reusable steps vs scenario-specific。
经过多年使用Cucumber两种风格,并考虑到上述困境,这些都是我的结论:
所以,我认为Cucumber目前已经破产,而且你最喜欢的单元测试框架之上的普通Capybara是最灵活的。
如果他们选择,Cucumber可以添加场景上下文,特定于功能的场景,场景命名空间等,这样您就可以通过某种方式调整场景的范围 - 通过功能,用户角色,任何有意义的 - 并大大减少命名冲突以制作场景 - 特定步骤真正可行。在那一点上,我认为会有一个明确的风格赢家。在此之前,总是存在这样的紧张,需要抽象你的步骤以避免命名冲突,而不是希望保持它们的场景特定的简单性和可读性。
尝试解决这些缺点的替代项目是Spinach,但该项目并非全部活跃。 See my comments here about an evaluation of Spinach vs Cucumber
答案 3 :(得分:7)
我也在寻找黄瓜项目。实际上在Cucumber的存储库中有一个wiki页面,其中列出了这些项目(并非所有项目仍然使用Cucumber ):
使用黄瓜的项目:
/generators/clearance_features/templates/features/
/features/
/plugins/*/features
/features
/features
/features/
/features/
来源: https://github.com/cucumber/cucumber/wiki/Projects-Using-Cucumber
答案 4 :(得分:5)
我建议:
https://github.com/teambox/teambox/tree/dev/features
更新:正如Ivailo Bardarov所说,他们使用的是网步,这在目前是不好的做法。只需看看这个作为参考,看看好的功能,而不是步骤!
更新2:我认为,我从关键版本的Object on Rails书籍提供的黄瓜功能中学到了很多东西。源代码不是开源的,因此我无法在此处发布或无法找到它的链接。
我首选的方法是使功能语言接近域/业务语言而不是特定步骤或填写表单。所以不要在我的功能中使用这样的东西:
When I fill in "Name" with "XYZ
我的功能会说:
When I create a project:
| name |
| xyz |
然后我的步骤就会有,点击链接的代码,解析表格并填写相关的表格字段等。
答案 5 :(得分:3)
我们在我当前的项目中使用Cucumber进行网络应用程序重新设计,但它不是开源的,因此我无法提供一组实际的功能和步骤。
我会说这些two samples中的页面对象模式受到了很大的启发。我们正在与UX团队进行大量的UI重构。使用Page Objects使得测试适应这些变化相当简单。
答案 6 :(得分:3)
我希望我可以发布我们的公司回购(财富500强的大型内部网络应用程序)。
野外最好的可能是维基百科的测试:
https://github.com/wikimedia/qa-browsertests
您确实需要使用页面对象进行抽象。即使这样,当您的应用程序超过30个输入屏幕时,您的测试也难以抽象化。
我有一种快速抽象没有周期的常见路径的实验方法;应该清理它并将其作为拉动请求发送给Cheezy:https://github.com/cheezy/page-object
答案 7 :(得分:2)
大型项目的一个常见问题是黄瓜功能需要花费大量时间来编写。
因此涉及多种策略: 如果您使用Cucumber描述遗留系统,您可以通过黄瓜和水豚获得不错的验收测试覆盖率,然后重构您的黄瓜步骤定义。
如果您正确进行单元测试,请使用Cucumber仅描述应用的快乐路径,或仅描述基本的非快乐路径。获得RSpec(或选择的Xunit)的报道。
Cucumber的关键问题是功能应该在很高的层次上描述功能。您需要使步骤定义DRY和可重用,并且我喜欢重定向步骤定义以保持利益相关者有趣的功能简明扼要。虽然我认为这一点可能有点争议。