0

当我们定义一个模型并且它有一些字段时,有时在一些 RSpec 测试中我会看到如下内容:

let(:network) { build(:provider_network) }

  it 'responds to provider count' do
    expect(network).to respond_to(:provider_count)
  end

因此,例如,在这里我们在模型中有一个名为的字段,provider_count因此我们为它创建了该测试。
我想看看这是否真的有必要和测试它的好习惯?还是只是假的?

4

1 回答 1

1

关于某物有多“有用”的问题几乎总是有争议的,尤其是在测试中——然而,在我看来,所写的测试是如此微不足道以至于毫无用处。相反,任何涵盖真正功能的测试(例如,使用provider_count字段的测试)也将固有地测试模型响应provider_count。正如所写的那样,测试有点像有"foo".should == "foo"什么意义?

您本质上是在测试表单,而不是在这里起作用。单元测试应该几乎总是测试功能而不是形式。

我认为这个测试不是杂乱无章的唯一情况是作为文档的主要位置。例如,如果provider_count是一个非规范化字段,看起来像是将来删除的候选对象,或者涉及错误修复,那么将此测试作为稍后将要中断的点,以吸引未来的开发人员关注测试是可以的。一旦他们的眼睛被吸引,那么你就有了文档,可以告诉他们provider_count不能简单地删除或更改的原因。如果您确定有人可能会想将其移除,那么它是一种避雷针,可以告诉人们该领域的目的。

当然,从理论上讲,如果有人弄乱 ,您将在其他地方进行另一个功能更强的测试provider_count,因此唯一的价值是预测有人会破坏它并混淆其他测试如何没有通过他们的更改. 这是太多的猜测和算命,我会尽量避免这种冲动作为 YAGNI 的延伸。

于 2013-02-26T04:36:21.343 回答