Tri*_*ong 31 rspec ruby-on-rails mocking factory-bot
我对rspec和整个TDD方法都很陌生.有人可以解释一下mock和stub之间的区别.我们何时使用它们,何时使用Factory Girl在测试用例中创建对象?
Stu*_*tLC 16
你的第一站是Martin Fowler的着名文章:Mocks不是Stubs
编辑
Mocks并且Stubs是两种类型的测试双打(Mezaros术语).测试双精度通常用于模拟被测系统(或被测试类)所需的依赖关系,以便可以独立于其依赖关系测试SUT/CUT.(警告 - 精确的术语可能是一个非常敏感的话题,例如杰夫在这里提到的)
来自维基百科:
例子
*像Mockito(Java)和Moq(.Net)这样的框架允许您使用最少的代码动态地构建针对依赖项接口的模拟类,并提供验证SUT与模拟正确交互的能力,例如通过检查SUT使用正确的参数调用mock的方法正确的次数.*免责声明 - 我不是一个红宝石开发者
jde*_*eno 16
您可以将模拟(或双重)视为假对象.当您正在测试并且需要使用在测试中不易使用的对象时,您可以使用模拟作为您期望该对象的行为和解决方法的近似值.存根可以以类似的方式使用,但可以在对象上的单个方法上使用.
这是一个使用大量两者的相当人为的例子:
class Client
def connect_to_server
if Server.connect.status == 'bad'
show_an_error
else
do_something_else
end
end
def do_something_else; end
def show_an_error; end
end
context "failure" do
it "displays an error" do
bad_network_response = double("A bad response from some service", :status => 'bad')
Server.should_receive(:connect).and_return(bad_network_response)
client = Client.new
client.should_receive(:show_an_error)
client.connect_to_server
end
end
Run Code Online (Sandbox Code Playgroud)
你可以想象,使用大量的模拟或存根是一个坏主意; 这基本上掩盖了测试中部分代码,但对于某些困难/罕见的测试场景来说,它是一个简单的解决方案.
Factory Girl可用于生成测试数据.您可以使用工厂作为为模型创建实例的配方,您可能需要测试涉及大量测试数据的内容,这将是使用夹具无法工作并且显式创建复杂对象的情况可能是乏味的.
| 归档时间: |
|
| 查看次数: |
8338 次 |
| 最近记录: |