단위 테스트에서 종종 코드에서 임의의 값을 던져 그것이 무엇을하는지 확인합니다. 예를 들어 foo(1, 2, 3)
17을 반환한다고 가정하면 다음과 같이 작성할 수 있습니다.
assertEqual(foo(1, 2, 3), 17)
이 숫자는 순전히 임의적이며 더 넓은 의미는 없습니다 (예를 들어 경계 조건은 아니지만 테스트합니다). 나는이 숫자들에 대한 좋은 이름을 내기 위해 고군분투 할 것이고, 같은 것을 쓰는 const int TWO = 2;
것은 분명히 도움이되지 않습니다. 이와 같은 테스트를 작성해도 괜찮 습니까? 아니면 숫자를 상수로 계산해야합니까?
에서 모든 매직 넘버가 동일하게 만들어 집니까? 문맥에서 의미가 분명하다면 마법의 숫자는 괜찮다는 것을 알았지 만,이 경우 숫자는 실제로 의미가 없습니다.
const int TWO = 2;
를 사용하는 것보다 더 나쁩니다 2
. 그것은 규칙의 정신을 어기려는 의도로 규칙의 표현에 부합합니다.
foo
이면 아무 의미도 없으며 매개 변수입니다. 그러나 실제로, 나는 함수가 그 이름이없는 확신하고, 매개 변수 이름이없는 bar1
, bar2
하고 bar3
. 이름 에 의미 가 있는 좀 더 현실적인 예를 만들고 테스트 데이터 값에도 이름이 필요한지 논의하는 것이 훨씬 더 합리적입니다.
1, 2, 3
이전에 값을 저장 한 3D 배열 인덱스 인17
경우이 테스트는 멋질 것이라고 생각합니다 (부정적 인 테스트가있는 한). 그러나 계산 결과 인 경우,이 테스트를 읽는 사람은 왜foo(1, 2, 3)
되어야 하는지 이해해야17
하며 마법 숫자는 아마도 그 목표를 달성하지 못할 것입니다.