Ale*_*lov 8 testing bdd rspec ruby-on-rails cucumber
我喜欢Cucumber
将用户规范连接到集成测试的方式.这个Cucumber
部分对我来说或多或少都很清楚.
当谈到应该使用rspec(非集成测试)测试什么以及什么不应该测试时,我很困难.
用rspec
已经过测试的东西进行单元测试是否正确Cucumber
(例如,如果Cucumber测试失败,单元测试将100%失败,如果Cucumber测试成功,单元测试将100%成功)?
具体来说,我有三个我想解决的例子.
这是RSpec书中的一个案例.他们有以下几点Cucumber scenario
:
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:"
Run Code Online (Sandbox Code Playgroud)
他们之后建立了两个rspec-tests
:
describe "#start" do
it "sends a welcome message" do
end
it "prompts for the first guess" do
end
end
Run Code Online (Sandbox Code Playgroud)另一个示例是测试路由或操作重定向,而存在以下情形:
Given I am at the login page
When I fill in the right username and password
Then I should be at the index page
Run Code Online (Sandbox Code Playgroud)有时我们测试已经测试过的助手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:"
Run Code Online (Sandbox Code Playgroud)
我应该测试帮助者在"4:43"中打破283分钟,但事实证明它已经过测试了Cucumber
.
它可能不是最好的例子,但它说明了我在说什么.
对我来说,那些测试是重复的.
你能否就上面的例子发表评论?
rspec
当Cucumber tests
已经存在时,是否有任何关于应该测试的原则或指导方针?
Koc*_*r4d 10
所有这些只是我对这个广泛而开放的话题的个人看法.有些人可能会不同意和有趣.
根据一般准则,您应该使用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
Run Code Online (Sandbox Code Playgroud)
Rspec的:
您可能会有某种用户模型:
您可以拥有某种身份验证对象:
如果您的身份验证数据库位于不同的服
和yada yada yada ...永远你的黄瓜测试将保护您的应用程序用户登录的一般目的.即使您在引擎盖下添加或更改行为,只要此测试通过,您就可以确信用户可以登录.
一般来说,你的问题太宽泛,你找不到一个答案,不同的人会有不同的想法.你应该关注的是尽可能好地测试,随着时间的推移你肯定会找到适合自己的方式.没有一个伟大的测试套装比没有好.
因为好的设计有助于编写好的测试,我会推荐Ruby中的实用面向对象设计: Sandi Metz 的敏捷入门(这是我读过的最好的书之一)
归档时间: |
|
查看次数: |
881 次 |
最近记录: |