首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rspec测试以确认四个无效日期的拒绝

Rspec测试以确认四个无效日期的拒绝
EN

Code Review用户
提问于 2017-07-14 18:17:44
回答 1查看 269关注 0票数 3
代码语言:javascript
复制
require_relative '../price_entry_class.rb'
require_relative '../exceptions.rb'
require 'spec_helper'

describe PriceEntry do
    it "throws expection on invalid date format" do
        expect { described_class.date_from_input_to_storage("20010101") }.to raise_error(InvalidInputData)
        expect { described_class.date_from_input_to_storage("zażółć") }.to raise_error(InvalidInputData)
        expect { described_class.date_from_input_to_storage(nil) }.to raise_error(InvalidInputData)
        expect { described_class.date_from_input_to_storage(-19_199) }.to raise_error(InvalidInputData)
    end
end

在一个Rspec测试中有多个期望是可以的吗?rubocop-rspec声称最好将这个测试分为4:

代码语言:javascript
复制
spec/price_entry_class_spec.rb:14:2: C: Example has too many expectations [4/1].

声称在每个单元测试中拥有单一断言总是更好,这对我来说是相当令人惊讶的。有充分的理由把这样的测试分成四个单独的测试吗?

这个测试一次只测试一件事情(显然是格式错误的输入,导致异常)。

我可以想象把它改写成

代码语言:javascript
复制
["20010101", "zażółć", nil, -19_199].each do |malformed_input|
    expect { described_class.date_from_input_to_storage(malformed_input) }.to raise_error(InvalidInputData)
end

但我不相信它正在提高可读性、可维护性或其他任何东西。

EN

回答 1

Code Review用户

回答已采纳

发布于 2017-07-14 18:34:11

原因是,如果这个测试失败了,您将不得不分别确定4个子预期中哪个失败了。

根据测试报告的输出,这可能是一个实际问题,也可能不是一个实际问题。

这个测试一次只测试一件事情(显然是格式错误的输入,导致异常)。

实际上,你在测试:

  • 无效数字引发错误
  • 非日期字符引发错误。
  • nil引发错误
  • 负数引起错误

也就是说,如果你实际上是在做手动模糊化,而不关心这些区别--尽管我认为它们在这个特殊的情况下是有用的--那么我看不出这有什么问题。

测试规则和最佳实践是有帮助的,但不要陷入其中。如果你知道你自己的测试目标,并且明白为什么偏离最佳实践可能是可以的,那么一定要这么做。

票数 3
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/169262

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档