ruby-on-rails – 在Rails中设置rspec和黄瓜之间的界限
我喜欢Cucumber将用户规范连接到集成测试的方式.黄瓜部分或多或少对我来说很清楚.
当涉及到应该使用rspec(非集成测试)测试什么以及什么不应该测试时,我很挣扎. 使用已经使用Cucumber测试的rspec进行单元测试是否正确(例如,如果Cucumber测试失败,单元测试将100%失败,如果Cucumber测试成功,单元测试将100%成功)? 具体来说,我有三个我想解决的例子. >这是RSpec书中的一个案例. Given I am not yet playing When I start a new game Then I should see "Welcome to Codebreaker!" And I should see "Enter guess:" 他们在之后建立了两个rspec测试: describe "#start" do it "sends a welcome message" do end it "prompts for the first guess" do end end >另一个示例是测试路由或操作重定向,同时存在以下情形: Given I am at the login page When I fill in the right username and password Then I should be at the index page >有时我们会测试已经使用Cucumber测试过的助手: Given Mike has spent 283 minutes online When I go to the Mike's profile page Then I should see "4:43" for "Time online:" 我应该测试帮助者在“4:43”中打破283分钟,但事实证明它已经用黄瓜测试了. 它可能不是最好的例子,但它说明了我在说什么. 你能否评论一下上面的例子? 当有黄瓜测试时,是否有关于应该用rspec测试什么的原则或指南? 解决方法
所有这些只是我对这个广泛而开放的话题的个人看法.有些人可能会不同意和有趣.
根据一般准则,您应该使用Cucumber来测试整个应用程序堆栈,这称为用户体验.此应用程序堆栈可能由许多较小的独立对象组成,但与使用您的应用程序的用户对这些细节不感兴趣相同,您的黄瓜测试不应该关注它们,而是将注意力集中在应用程序的外层. 另一方面,RSpec(在您的设置中!)应该主要关注那些小对象,构建应用程序的块. 书中的小应用示例存在一个很大的问题:它们很小! 应用程序外层与其内部之间的边界模糊不清.整个应用程序使用两个对象构建!很难区分应该测试什么.随着应用程序规模的扩大,用户体验测试(黄瓜)和对象状态测试/消息期望测试(RSpec)变得越来越明显. 使用你的第二个例子: 有了这个Cucumber的故事: Given I am at the login page When I fill in the right username and password Then I should be at the index page Rspec的: 你可能会有某种用户模型: >测试用户名语法(例如必须以大写字母开头) 您可以拥有某种身份验证对象: >测试有效和无效登录等 如果您的身份验证数据库位于不同的服 > mock连接和身份验证数据库,并测试数据库是否从身份验证对象接收请求. 和yada yada yada …永远你的黄瓜测试将保护您的应用程序用户登录的一般目的.即使您在引擎盖下添加或更改行为,只要此测试通过,您就可以确信用户可以登录. >你应该测试一次(在一个地方) 一般来说,你的问题太宽泛,你找不到一个答案,不同的人会有不同的想法.你应该关注的是尽可能好地测试,随着时间的推移,你一定会找到适合自己的方式.没有一个伟大的测试套装比没有好. 因为好的设计有助于编写好的测试我会推荐Sandix Metz的Practical Object-Oriented Design in Ruby: An Agile Primer(这是我读过的最好的书之一) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |