2012-09-27 5 views
7

모카 단위 테스트 슈트가 있습니다.단위 테스트가 때때로 실패하거나 때때로 통과합니다

로컬로 실행할 때 모든 것이 정상적으로 작동합니다. Jenkins CI 서버에서 실행하면 때로는 실패하고 때로는 통과합니다.

나는 왜 그들이 실패하는지 재현 할 수 없다. 이 문제의 원인은 무엇입니까?

+0

예상 파일이 일시적으로 을 잠긴? dev 컴퓨터에서 발생하지 않는 고성능 CI에서 멀티 스레딩 테스트를 통해 문제가 발생합니까? 일시적인 네트워크 결함으로 인해 물건이 차단 되었습니까? 추적하기 힘든 단위 테스트 실패를 유발할 수있는 많은 것들이 있습니다 ... 그것은 모두 문제 해결의 일부입니다. 문제가되는 것과 동일한 테스트입니까? – TZHX

답변

1

여러 테스트를 위해 테스트 픽스처를 재사용하고 있습니다. 경우에 따라 테스트 순서가 로컬 시스템의 순서와 달라지며 테스트를 시작할 때 정확한 조명기가없는 경우도 있습니다. 이 문제를 해결하려면 각 테스트에 깨끗한 조명을 제공해야합니다.

타 원인 (동일한 테스트 구성이 개 빌드 서버) 테스트를 runnen 때 여러 위치에서 데이터베이스를 재사용하는 것이 될 수 있습니다. 각 빌드 서버에 자체 데이터베이스를 제공하십시오. 또는 데이터베이스 계층 하위/모의. 테스트는 외부 리소스에 대한 연결을 테스트 할 때를 제외하고는 외부 리소스에 의존해서는 안됩니다.

+0

슬프게도, 그렇지 않습니다. 테스트가 실행될 때마다 전체 데이터베이스가 지워집니다. 테스트를 실행하기 위해 모카를 사용하므로 시리즈로 실행됩니다. 데이터베이스는 해당 컴퓨터에 로컬로 설치되므로 다른 서비스에서도이 데이터베이스를 사용할 수 없습니다. –

2

여러 가지 이유로 간헐적으로 테스트가 실패 할 수 있으며 테스트가 실패하는 이유를 식별하는 것이 종종 코드베이스 및 환경에 대해 드러납니다. - 테스트 환경은 잘 알려진 상태로 재설정되지 않을 경우 상태가 시험 사이의 문제가 발생할 수 있습니다 개최 싱글 공유 객체 •

: 여기

몇 가지 가능한 원인입니다. 테스트 러너는 비 결정적 순서로 테스트를 실행하면 실제로 상태 문제를 손상된 환경 및 외부 종속성 •

노출시키는 노출되는 임의의 오류가 발생할 경우 - 예상치 못한 결과

발생할 수 있습니다 상태를 저장할 수있는 외부 객체를

• 타이밍 - 너무 특정한 시간 초과 또는 스레드 잠자기로 테스트가 작성되는 경우가 있습니다. 빌드 서버가 부하가 작동 할 경우 이러한 시간 제한이

일반적인 지침으로 충분히 길게하지 않을 수 있습니다, 테스트를해야합니다 :

  • 절연 : 테스트는
  • 반복 한 번에 하나 개의 단위에 초점 : 생산 같은 결과마다
  • 독립 : 테스트 execu의 수를 줄여
0

에서

더 많은 정보는 그것은 당신이 멀티 스레드 코드를 테스트하는 경우 발생하고 테스트에서 Thread.sleep(time);를 사용할 수 있습니다. 절전 시간이 길면 컴퓨터 처리 속도에 따라 검사가 통과하거나 실패 할 수 있습니다.관련 토론 :

관련 문제