Dealing with duplication between unit and integration tests

∥☆過路亽.° 提交于 2019-12-11 02:03:36

问题


I have an algorithm implemented by a number of classes, all covered by unit test.

I would like to refactor it, which will change behavior of two classes. When I change one class and its tests, all unit tests pass, though the algorithm becomes incorrect until refactoring is done.

This example illustrates that complete coverage by unit tests is sometimes not enough and I need "integration" tests for the whole algorithm in terms of input-output. Ideally, such tests should cover the behavior of my algorithm completely.

My question: looks like by adding such integration tests I make unit tests unnecessary and superfluous. I don't want to support duplicated test logic. Should I remove my unit tests or leave them as is, e.g. for easier bug location?


回答1:


This is part of the problem with tests which are too fine grained and are tightly coupled with the implementation.

Personally I would write tests which focus on the behaviour of the algorithm and would consider this 'a unit'. The fact that it is broken into several classes is an implementation detail, in the same way that breaking down a public method's functionality into several smaller private methods is also an implementation detail. I wouldn't write tests for the private methods separately, they would be tested by the tests of the functionality of the public method.

If some of those classes are generically useful and will be reused elsewhere then I would consider writing unit tests for them at that point as then they will have some defined behaviour on their own.

This would result in some duplication but this is ok as those classes now have a public contract to uphold (and which is used by both components which use it), which those tests can define.

Interestingly, see the definition of Unit in this article



来源:https://stackoverflow.com/questions/27103346/dealing-with-duplication-between-unit-and-integration-tests

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!