ruby – 断定在黄瓜中抛出一个特殊的异常

栏目: Ruby · 发布时间: 5年前

内容简介:http://stackoverflow.com/questions/9219959/asserting-that-a-particular-exception-is-thrown-in-cucumber

脚本

我正在写一个图书馆(没有Ruby on Rails),我想要有非常详细的黄瓜功能.这特别包括描述在各种情况下应该抛出的错误/异常.

编写黄瓜步骤最直观的方式可能就是这样

When I do something unwanted
Then an "ArgumentError" should be thrown

问题

我必须解决两个问题:

>抛出异常时,第一步不应该失败.

>第一步抛出的异常应该可以访问第二步,以做一些断言魔术.

不合理和繁琐的解决方案

我可以想出的最好的方法是在第一步中缓存异常,并将其放入第二步可以访问的实例变量中,如下所示:

When /^I do something unwanted$/ do
  begin
    throw_an_exception!
  rescue => @error
  end
end

Then /^an "(.*)" should be thrown$/ do |error|
  @error.class.to_s.should == error
end

但是,这样做在第一步或多或少无用于我不希望失败的情况,而且需要一个实例变量,这绝对不是一件好事.

所以,任何人都可以帮我一个至少不那么麻烦的解决方案?或者我应该不同地写我的功能吗?任何帮助将不胜感激.

我再想一次,也许答案是:

没有优雅的解决方案,因为您的案件违反了 Given-When-Then 计划.

你期望“然后一个例外应该被抛出”是“当我做不需要的东西”的结果.

但是当你想到的时候,这不是真的!这个例外并不是这个动作的结果,实际上这个例外只是表示“When”-Statement failed.

我的解决办法是在较高层次上进行测试:

When I do something unwanted
Then an error should be logged

要么

When I do something unwanted
Then the user should get an error message

要么

When I do something unwanted
Then the program should be locked in state "error"

或这些的组合.

那么你会在你的程序中“缓存异常” – 这是完全有道理的,因为你最有可能需要这么做.

你所说的两个问题也会解决.

如果您真的必须测试异常

那么我猜,那黄瓜不是正确的测试套件,嗯? :wink:

不管怎么说,由于给予 – 当时的计划,我只会写

When I do something unwanted it should fail with "ArgumentError"

并在步骤定义的东西(未经测试,请纠正我,如果你尝试)

When /^I do something unwanted it should fail with "(.*)"$/ do |errorstring|
  expect {
    throw_an_exception!
  }.to raise_error(errorstring)
end

如上所述,这是可怕的错误,因为计划被打破,但它将服务于目的,不是吗? :wink:

您将在测试错误 at rspec expectations 找到进一步的文档.

http://stackoverflow.com/questions/9219959/asserting-that-a-particular-exception-is-thrown-in-cucumber


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

浅薄

浅薄

[美] 尼古拉斯·卡尔 / 刘纯毅 / 中信出版社 / 2010-12 / 42.00元

《浅薄:互联网如何毒化了我们的大脑》在我们跟计算机越来越密不可分的过程中,我们越来越多的人生体验通过电脑屏幕上闪烁摇曳、虚无缥缈的符号完成,最大的危险就是我们即将开始丧失我们的人性,牺牲人之所以区别于机器的本质属性。——尼古拉斯•卡尔“谷歌在把我们变傻吗?”当尼古拉斯•卡尔在发表于《大西洋月刊》上赫赫有名的那篇封面文章中提出这个问题的时候,他就开启了人们热切渴望的期盼源泉,让人急于弄清楚互联网是在......一起来看看 《浅薄》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具