这一直困扰着我.为什么人们在rspec中进行单元测试,但在黄瓜中进行了整合测试?我不问为什么这些测试是必要的 – 我知道集成和单元测试有什么区别.我只是不明白为什么,给黄瓜的完全可定制的语法,它不用于单元测试?
在我看来,像黄瓜和rspec编写的代码量相同,唯一的区别就是黄瓜分离测试逻辑和测试写作.
解决方法
使用黄瓜进行单元测试有相当多的开销.不仅您必须编写功能,而且还可以使用单独的代码将其映射到实现.
单元测试的写入速度非常快,执行速度非常快.当然,黄瓜专注于最终用户体验,主要是由于用于编写功能的语言.
As some stakeholder of a system
I would like to perform an activity
So that I can get some benefit out of it
Given a precondition When I perform an action Then something should happen
经常被忽略的开头段是非常重要的,因为它为操作设置了一个上下文,并解释了为什么会发生这种情况.由于使用自然语言,这些东西很容易向非程序员展示,以获得一些反馈.
现在,使用这些单元测试最好看起来很尴尬.首先,最终用户关注的是建议采用更加集成的方法,因为该功能并没有说明嘲弄和UI /逻辑分离.即以下功能似乎很奇怪:
Given a that a database mock is configured with the following data | ID | Username | | 0 | igor | When call FindAll on User Repository Then I get the following user back | ID | Username | | 0 | igor |
另外,随着你的SUT变小(即一个类),操作的上下文并不重要.用户存储库不关心上下文例如它不关心消费者是普通用户还是VIP用户.一个简单的组件(它应该是,按照SRP),是完全根据其输入确定的.
所以,单元测试是在那里验证你写的是正确的,并且cucmber测试是通过在系统的上下文中放置系统的行为来验证你所写的内容是否满足一些更高的目的.