红宝石 – 单元测试复制功能还是测试输出?

栏目: 编程工具 · 发布时间: 7年前

内容简介:代码日志版权声明:翻译自:http://stackoverflow.com/questions/2482373/should-a-unit-test-replicate-functionality-or-test-output

我已经遇到这个困境了好几次.我的单元测试是否重复了他们测试的方法的功能以验证其完整性?或者单位测试是否尝试通过大量手动创建的输入和预期输出实例来测试该方法?

我主要提出的问题是,您正在测试的方法是相当简单的,并且正确的操作可以通过扫视代码一分钟来验证.

简化例子(红宝石):

def concat_strings(str1, str2)
  return str1 + " AND " + str2
end

上述方法的简化功能 – 复制测试:

def test_concat_strings
  10.times do
    str1 = random_string_generator
    str2 = random_string_generator
    assert_equal (str1 + " AND " + str2), concat_strings(str1, str2)
  end
end

我明白,大多数情况下,您测试的方法不会简单到足以证明这样做.但我的问题依然存在;在某些情况下,这是一种有效的方法(为什么或为什么不)?

这是一个有争议的立场,但我相信 unit testing using Derived Values

远远优于使用任意硬编码的输入和输出.

问题是,由于算法变得更加复杂,如果用硬编码的值表示,则输入和输出之间的关系变得模糊.单位测试最终是一个假设.它可能在技术上工作,但是由于导致了 Obscure Tests ,它会损害测试的可维护性.

使用 Derived Values 测试结果可以确定测试输入与预期输出之间的更清晰的关系.

这个没有测试任何东西的论据根本不是真的,因为任何测试用例只会运行通过SUT的路径的一部分,所以没有一个测试用例将重现整个被测试的算法,但测试的组合将会所以.

另外一个好处就是你可以在 use fewer unit tests to cover the desired functionality ,甚至让他们更多的交流在同一时间.最终的结果是更简单和更可维护的单元测试.

代码日志版权声明:

翻译自:http://stackoverflow.com/questions/2482373/should-a-unit-test-replicate-functionality-or-test-output


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

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

Clean Architecture

Clean Architecture

Robert C. Martin / Prentice Hall / 2017-9-20 / USD 34.99

Practical Software Architecture Solutions from the Legendary Robert C. Martin (“Uncle Bob”) By applying universal rules of software architecture, you can dramatically improve developer producti......一起来看看 《Clean Architecture》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

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

HEX CMYK 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具