답변:
테스트를 구성하는 방법은 테스트의 중요성에 비해 중요하지 않습니다.
좋은 테스트 스위트를위한 가장 중요한 것은 모든 기능을 포함한다는 것입니다. 회귀 결함이 발생할 때마다 즉시 알 수 있습니다. 각 메소드에 대해 하나의 테스트를 작성할지, 메소드의 각 입력 값 조합에 대해 하나의 테스트를 수행 할 것인지, 해당 메소드 내에서 가능한 각 코드 경로에 대해 하나의 테스트를 수행 할 것인지는 덜 중요합니다. 이러한 테스트를 몇 개 또는 여러 개의 테스트 클래스로 구성할지 여부는 훨씬 덜 중요합니다. 테스트 스위트는 항상 완전히 성공해야하므로 17 개 테스트 중 3 개 또는 2 개 중 하나에 실패하는지 여부는 중요하지 않습니다. 결정된.
물론 테스트 코드도 코드이므로 유지 관리 가능, 모듈화 등을위한 일반적인 모범 사례를 따라야합니다. 그러나 테스트 클래스 자체가 얼마나 잘 유지 관리 될 수 있는지에 따라 결정되어야합니다. 그들이 시험하는 수업. 언급 한 두 가지 정책 모두 일관되게 따라 가면 찾을 수있는 위치를 기억하는 데 도움이 될 수 있지만, 정책 선택보다 일관성이 더 중요합니다.
"메소드 당 하나의 테스트 클래스"와 "클래스 당 하나의 테스트 클래스"는 모두 너무 극단적이라고 생각합니다.
일반적으로 테스트 방법 / 단위 테스트 당 하나의 검사를 원합니다. 예를 들어, 이것들은 a list.isEmpty = true
및 을 확인하기위한 다중 어설 션일 수 있으므로 list.Length = 0
동작 당 하나의 테스트 방법 / 단위 테스트입니다.
이를 통해 동작을 설명하는 테스트 메소드 이름을 쉽게 찾을 수 있습니다. 테스트 메소드를 테스트 클래스로 그룹화하려고하므로를 읽으면 test classname.test method
의미가 있습니다. 일반적으로 공유 설정 코드가 있으며 테스트 설정 / 픽스처에 쉽게 넣을 수 있습니다. 테스트중인 클래스에 따라 전체 클래스에 대해 하나의 테스트 클래스가 될 수 있으며 하나의 메소드에 대해 하나의 테스트 클래스가 될 수도 있습니다. 그러나 보통은 중간에있을 것입니다.
일반 코드와 마찬가지로 테스트를 가능한 한 읽기 쉽게하려고합니다. 나에게 도움이되는 것은 테스트 코드를 구성 할 때 BDD를 따르는 경우 또는 어 트랙트 동작 방식입니다. 테스트 클래스는 설정이 가능합니다. 그런 다음 해당 클래스의 모든 테스트 메소드는 주어진 (또는 그 일부) 메소드를 사용하며 한 번에 하나씩 있습니다.
단위 테스트는 테스트중인 클래스의 기능을 사용하는 방법에 대한 문서로 생각하십시오. 좋은 단위 테스트를 통해 테스트를 읽고 사용하려는 클래스의 기능을 사용하는 방법과 그 효과가 정확히 무엇인지 알 수 있습니다.
무언가가 깨지고 단위 테스트가 실패하면 가능한 한 쉽게 깨지기를 원합니다. 테스트 당 하나의 주장이 여기에 많은 도움이됩니다. 한 테스트에 여러 어설 션이있는 경우 첫 번째 어설 션 만 실패한 다음 메서드가 종료되므로 첫 번째 어설 션이 실패한 문제를 해결할 때까지 다음 테스트에서 테스트 된 다른 동작도 중단되는지 알 수 없습니다. 한 번의 주장으로 다른 모든 테스트 방법이 여전히 실행되며 실패의 깊이를 이해하는 것이 훨씬 빠릅니다.
물론 Kilian Foth에 동의합니다. 실제로 작업중인 코드에 대해 몇 가지 단위 테스트를 수행하는 것이 운이 좋을 수 있습니다. 소규모의 현지화 된 테스트는 전혀 테스트하지 않는 것보다 낫거나 빌드 서버에서 실행되는 대규모 통합 테스트 만 수행하는 데 많은 시간이 걸리고 일반적으로 현지화되지 않은 경우가 많습니다 (오류의 위치를 신속하게 알려주지 않음) 조금 작업해야합니다).