1

我有一个由多个类实现的算法,全部由单元测试覆盖。处理单元测试和集成测试之间的重复问题

我想重构它,它会改变两个类的行为。 当我更改一个类及其测试时,所有单元测试都会通过,但算法在重构完成之前变得不正确。

这个例子说明单元测试的完整覆盖有时是不够的,我需要整个算法在输入输出方面的“集成”测试。理想情况下,这些测试应该完全覆盖我的算法的行为。

我的问题:看起来像通过添加这样的集成测试,我使单元测试不必要和多余。我不想支持重复的测试逻辑。我应该删除我的单元测试还是保持原样更容易找到错误位置?

回答

1

这是测试问题的一部分,测试过细,与实施紧密结合。

就我个人而言,我会写测试,重点放在算法的行为,并会考虑这个'一个单位'。它被分成几个类的事实是一个实现细节,就像将公共方法的功能分解成几个较小的私有方法一样,也是一个实现细节。我不会为私有方法单独编写测试,它们将通过公共方法的功能测试进行测试。

如果这些类中的一些通常是有用的,并且会在其他地方重用,那么我会考虑为它们编写单元测试,因为那时它们会自行定义一些行为。

这会导致一些重复,但这是好的,因为这些类现在有一个公开合约来支持(哪些组件使用它),这些测试可以定义。

有意思的是,看单位的定义在this article