단일 어설 션 테스트는 DRY를 위반합니까?
아니요, 그러나 위반을 조장합니다.
즉, 좋은 객체 지향 디자인은 단위 테스트의 창을 여는 경향이 있습니다. 단위 테스트를 서로 분리하여 테스트를 격리하여 심문 할 수 있고 필요한 경우 다른 테스트를 중단하지 않을 것이라는 확신을 가지고 고정하는 것이 더 중요합니다. 기본적으로 테스트 정확성과 가독성은 크기 나 유지 관리 성보다 중요합니다.
솔직히, 나는 당신이 묘사하는 이유 때문에 테스트 규칙 당 한 가지 주장을 한 적이 없었습니다. (리팩터링을 줄입니다).
함수가 주어진 입력에 대해 "foo"와 "bar"의 목록을 반환해야한다면, 어떤 순서로든 두 개의 assert를 사용하여 둘 다 결과 세트에 있는지 확인하는 것이 좋습니다. 문제가 발생하는 곳은 단일 테스트에서 두 개의 입력 또는 두 개의 부작용을 확인하고 두 원인 중 어느 것이 고장을 유발했는지 알 수없는 경우입니다.
나는 단일 책임 원칙에 대한 변형으로 본다 : 테스트를 실패하게 할 수있는 것은 단 하나뿐이어야하고, 이상적인 세상에서는 변화가 하나의 테스트 만 중단해야한다.
그러나 결국 그것은 트레이드 오프입니다. 모든 복사 붙여 넣기 코드를 유지 관리하는 데 더 많은 시간을 할애하거나 테스트가 여러 소스에 의해 중단 될 수있는 근본 원인을 찾아내는 데 더 많은 시간을 할애합니까? -some- 테스트를 작성하는 한, 그다지 중요하지 않을 것입니다. 단일 어설 션 테스트에 대한 경멸에도 불구하고 더 많은 테스트 측면에서 실수를 저지르는 경향이 있습니다. 귀하의 마일리지가 다를 수 있습니다.