2013-03-05 3 views
6

테스트 메소드의 이름이 다른 테스트에 영향을 줄 수있는 이유는 무엇입니까?메소드 이름으로 인해 JUnit 테스트가 실패합니다.

두 가지 테스트 클래스가있는 제품군이 있으며 class1 메서드 이름을 변경하면 class2의 테스트가 녹색 (ok)입니다.

두 클래스 모두 같은 이름의 메소드를 가지고 있지만 실패한 테스트는이 둘 중 하나가 아닌 것으로 나타났습니다. 그러나 그 중 하나의 이름을 변경하면 모든 테스트가 정상입니다.

다른 클래스에는 같은 이름의 메소드가 두 개 있지만 같은 패키지에 있어도 괜찮습니까? 그리고 다른 테스트가 무작위로 실패한다는 사실은 단지 우연의 일치입니까?

ps : 실행 된 테스트 순서는 해당 메서드의 이름을 바꾼 후에 변경됩니다. ps2 : 나쁜 영어로 죄송합니다. enter image description here

+11

테스트는 실제로 어떤 순서로도 실행되도록 설계되어 있습니까? 실행되는 순서에 의존 할 수있는 상태가 있습니까? – vikingsteve

+6

문제는 아마도 테스트 순서가 아닌 실행 순서 일 것입니다. 테스트 중 하나 (또는 ​​여러 개)가 다른 테스트의 상태를 변경시킬 수 있습니다. –

+1

테스트 격리 실패와 같은 냄새가납니다. 테스트가 다른 테스트의 부작용에 의존 할 때 호출되므로 특정 순서로 실행해야합니다. –

답변

7

의 JUnit에는 버그가 없습니다 :

그 사진이 더 나은 내 질문에 설명 할 수 있습니다! 우리 팀은 부적절한 자원 관리로 인한 유사한 결과를 경험했습니다. 실패한 테스트의 이름을 변경하여 먼저 실행되도록 할 수 있습니다. 그들은 이제 녹색으로 바뀌어야하는데, 이는 주로 테스트간에 리소스가 우연히 공유된다는 신호입니다. 이런 경우에는 리소스를 해체 할 수 있습니다 (@After). 다음은 원인을 확인하기위한 약간의 체크리스트입니다.

  • 테스트를 통과 한 스레드가 있습니까?
  • 모든 Executor를 종료하고 종료합니까?
  • 테스트 후에도 파일이나 스트림이 열려 있습니까?
  • 테스트 후에 테스트 클래스의 모든 필드를 지우거나 다시 초기화합니까?
  • 정적 참조 또는 싱글 톤을 사용하지 마십시오.
  • 테스트 방법에서 리소스를 해제하지 마십시오. 그렇지 않으면 예외로 인해이 코드 부분을 도달 할 수 없게 될 수 있습니다.
관련 문제