2013-08-14 2 views
2

2 가지 테스트 케이스가있는 간단한 arquillian 테스트 클래스가 있습니다. 테스트 클래스에는 정적 변수가 있으며 처음에는 null입니다. 첫 번째 테스트 케이스는 해당 변수의 값을 설정하지만 두 번째 테스트가 시작되면 변수의 값은 null입니다. 하나의 테스트가 다른 테스트에 의존하기 때문에 이것이 올바른 방법이 아니라는 것을 알고 있습니다.Arquillian 테스트 클래스 변수의 값이 손실 됨

다른 유사한 경우로 @BeforeClass 메서드에서 정적 변수의 값을 설정할 때. 첫 번째 테스트가 실행되면 변수는 다시 null이됩니다. 단지 @Before 메서드를 사용하면 값이 올바르게 설정되지만 많은 테스트가 있고 변수의 설정이 시간 집약적 인 경우 나쁜 대안이됩니다.

왜 이런 일이 발생하는지 이해가되지 않습니다. 테스트가 단순히 JUnit 테스트로 실행되는 경우 정적 변수가 정상적으로 작동합니다. 이것에 대한 치료법이 있습니까?

테스트는 관리되는 jboss 컨테이너로 실행됩니다.

답변

3

Junit은 테스트 사례 간 또는 테스트 사례 간 변수를 공유 할 수 없습니다. 실행 중에 각 테스트 케이스는 자체 변수 복사본을 갖게됩니다.

이러한 디자인이면의 이론적 근거는 테스트 사례가 서로 의존해서는 안된다는 것이 간단합니다. 그렇기 때문에 각 단위를 독립적으로 테스트해야하는 단위 테스트라고합니다.

하지만 실제로해야하는 경우 정보를 저장하기 위해 static 클래스 변수를 만들 수 있습니다.

+0

빠른 답변 감사드립니다. 문제는 Arquillian으로 테스트를 실행하면 @BeforeClass에 설정된 정적 변수도 다시 초기화된다는 것입니다. 이에 따라 내 질문을 업데이트했습니다. – Zuller

+0

@ Zuller, 정적 데이터를 저장하는 데 동일한 클래스를 사용하지 마십시오. 정적 데이터를 보유 할 별도의 클래스를 만들 수 있습니다. –