2016-10-05 10 views
0

시간 초과가 될 때까지 모든 것이 잘 작동하는 시험 스위트에서 문제가 발생합니다. 타임 아웃으로 인해 테스트가 실패하면 tearDown 함수가 호출되지 않고 반응기가 불결하게되어 나머지 테스트가 실패하게됩니다. 나는 timeout 후에 tearDown이 호출되어야한다고 믿는다. 왜 이런 일이 일어날 지 아무도 모른다.twisted trial에서 timeout 후에 tearDown이 호출되지 않습니까?

답변

1

테스트 결과에 관계없이 tearDown()을 호출해야합니다. tearDown()에 대한 the documentation에서 :

이 캐치가, 시험 방법은

그러나 예외가 발생하더라도이라고합니다. 동일한 문서에서 :

이 메서드는 테스트 메서드의 결과에 관계없이 setUp()이 성공한 경우에만 호출됩니다. 아이디어는 당신이 "설정"setUp()에서하려고했던 무엇이든되는되지 않았습니다 - 당신은 아마도 setUp() 반응기를 시작하고 때를 타임 아웃이 실행에서 tearDown()을 방해하는 것처럼

는 그래서 소리 성공적으로 설정했기 때문에 찢어 지려고하지는 않습니다. 그러나 관련 테스트의 코드와 함께 setUptearDown 메서드의 코드를 제공하지 않으면 확실하게 진단하기가 어려울 수 있습니다.

+0

setUp이 실패했는지 알 수있는 방법이 있습니까? 그것은 성공적으로 완료하고 테스트로 이동하는 것 같습니다.그런 다음 테스트에서 실패하고 tearDown이 호출되지 않습니다. – ppao

+0

시간 초과가 예외를 발생합니까? 그렇다면 그 예외를 잡으려고 할 수 있습니다. 그러나 방법을 보지 않고 말하기는 어렵습니다. 당신의 질문에'setUp' 메소드의 코드를 추가 할 수 있습니까? – elethan

1

제 박스에서 시간 초과가 발생해도 티 아웃이 실행되기 때문에 오히려 이상합니다. --unclean-warnings 플래그를 사용하지 않으면 원자로가 깨끗한 상태가 아닌 경우 테스트가 중지됩니다. 타임 아웃 후에 테스트 주자가 멈 춥니 까? 실행중인 Python과 Twisted의 버전은 무엇입니까?

특정 테스트 기능에 대해 고유 한 teardown을 실행해야하는 경우 매우 편리한 addCleanup() 콜백이 있습니다. 원자로가 더러운 상태가되지 않도록 콜백, LoopingCall 또는 callLater 함수를 취소해야하는 경우 유용합니다. addCleanupDeferred을 반환하므로 임시 해설을 수행하는 콜백을 연결할 수 있습니다. 강의실 정리가 효과가없는 경우 시도하는 것이 좋습니다. 내가 그렇게 "바르게 행동"트위스트 코드를 작성하는 데 사용했습니다

PS, 난 더러운 반응 상태로 가져 오는 방법을 기억하지 않습니다 : D 내가 자랑 아니에요 맹세합니다. 당신이하고있는 일에 대한 간략한 요약을 제게 드릴 수 있도록 제게 그것을 시험해 보시겠습니까?

0

나는이 문제를 발견했습니다. 앞으로 다른 사람에게 도움이 될 경우를 대비하여 여기에 설명해 드리겠습니다.

(deferred.callback이 호출 된 것처럼) 이미 호출 된 테스트에서 지연을 반환했지만 아직 미완성 된 콜백 체인이 있습니다. 시연 코드 https://github.com/twisted/twisted/blob/twisted-16.5.0/src/twisted/trial/_asynctest.py#L92에서 알 수 있듯이 반응기가 추락하면 tearDown이 호출되지 않는 이유가 설명됩니다. 나를위한 솔루션은 오랜 시간 동안 살아있는 콜백 체인이없는 불쾌한 테스트에서 지연을 반환하는 것입니다 (콜백은 지연을 스스로 반환하지 않습니다).