我有一个由多个类实现的算法,所有类都由单元测试覆盖。
我想重构它,这将改变两个类的行为。
当我更改一个类及其测试时,所有单元测试都会通过,但在重构完成之前算法会变得不正确。
这个例子说明,单元测试的完全覆盖有时是不够的,我需要在输入输出方面对整个算法进行“集成”测试。理想情况下,此类测试应完全涵盖我的算法的行为。
我的问题:看起来通过添加这样的集成测试我使单元测试变得不必要和多余。我不想支持重复的测试逻辑。
我应该删除我的单元测试还是保持原样,例如为了更容易定位错误?
这是测试粒度太细并且与实现紧密耦合的测试问题的一部分。
就我个人而言,我会编写专注于算法行为的测试,并将其视为“一个单元”。事实上,它被分解成几个类,这是一个实现细节,就像将一个公共方法的功能分解成几个较小的私有方法一样,也是一个实现细节。我不会单独为私有方法编写测试,它们将通过公共方法的功能测试来测试。
如果其中一些类通常有用并且将在其他地方重用,那么我会考虑在那时为它们编写单元测试,因为那时它们将有一些自己定义的行为。
这会导致一些重复,但这没关系,因为这些类现在有一个要维护的公共契约(并且由使用它的两个组件使用),这些测试可以定义该契约。
有趣的是,请参阅 Unit 的定义本文 http://www.thoughtworks.com/insights/blog/mockists-are-dead-long-live-classicists
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)