원문: https://testing.googleblog.com/2008/02/tott-stroop-effect.html (Translated by Google Gemini)

img

아래 두 행동을 얼마나 빨리 할 수 있나요?

  1. …25개 단어를 모두 소리 내어 읽기: 빨강, 초록, 파랑, … (지금 시도해 보세요!)
  2. …25가지 색깔을 모두 소리 내어 말하기: 초록, 노랑, 하양… (지금 시도해 보세요!)

두 번째 작업이 더 많은 시간과 노력을 필요로 했나요? 그렇다면, 여러분은 스트룹 효과를 경험하고 있는 것입니다. 스트룹 효과는 대략적으로 레이블(이 경우 단어)이 내용(색깔)과 같은 영역에 있고 의미가 충돌할 때, 레이블이 내용을 이해하는 능력에 방해가 된다는 것을 의미합니다.

이것이 테스팅과 무슨 관련이 있을까요? 다음 코드를 생각해 보세요.

public void testProtanopiaColorMatcherIsDistinguishable() {
  ColorMatcher colorMatcher = new ColorMatcher(PROTANOPIA);
  assertFalse(BLUE and VIOLET are indistinguishable,
    colorMatcher.isDistinguishable(Color.BLUE, Color.VIOLET));
}

이 테스트가 실패하면 다음과 같은 메시지가 생성됩니다.

Failure: testProtanopiaColorMatcherIsDistinguishable:
Message: BLUE and VIOLET are indistinguishable

Quick: 이 오류의 원인은 무엇이었나요? 파랑과 보라색이 구별 불가능했나요, 아니었나요? 망설이고 있다면, 그것이 바로 스트룹 효과입니다! 레이블(메시지)은 참 조건을 표현하지만, 내용(assertFalse 안)은 거짓 조건을 표현합니다. ColorMatcher 가 잘못된 일을 하고 있는 걸까요, 아니면 테스트 조건이 가짜일까요? 이 메시지는 귀중한 시간을 낭비하고 있습니다! 이제 테스트 이름과 테스트 메시지에 약간의 변경을 고려해 보세요.

Failure: testProtanopiaColorMatcherCannotDistinguishBetweenCertainPairsOfColors
Message: BLUE and VIOLET should be indistinguishable

이것이 더 명확하다고 느끼시나요? 적색맹(빨간색 스펙트럼에 대한 감도 감소)은 특정 색상 쌍을 구별 불가능하게 만듭니다. 파랑과 보라색은 구별 불가능했어야 했지만, 그렇지 않았습니다.

테스트를 작성할 때 명심해야 할 몇 가지 사항은 다음과 같습니다.

  • 누군가 테스트를 망가뜨렸을 때 – 테스트 이름과 메시지가 그들에게 유용할까요?
  • testMethodDoesSomething 과 같은 주관적인 테스트 이름이 testMethod 보다 더 도움이 될 수 있습니다.
  • 훌륭한 테스트 메시지는 실제 동작뿐만 아니라 예상 동작도 식별합니다.
  • ‘~해야 한다(Should)‘는 메시지에 유용하게 사용할 수 있는 단어입니다. 예상 동작이 실제로 발생하지 않았음을 명확히 합니다.