2012-07-10 5 views
3

나는 여러 테스트 메소드들로 junit.framework.TestCase을 확장하는 테스트 클래스를 가지고있다. 각 메소드는 서버와 교환 요청 및 응답 json strings.One 메소드에 대한 HTTP 연결을 열며, UID (sessionId와 비슷한)라는 응답을 얻는다. 서버에 대한 후속 요청에서.JUnit 테스트간에 상태를 어떻게 공유합니까?

이전에 해당 문자열을 파일에 쓰고 있었고 다음 요청에서 해당 파일을 string으로 읽었습니다. 한 번에 하나의 메서드를 실행하고 있습니다. 이제 파일 조작없이 해당 문자열을 사용하려고합니다. 거기에 추적 할 많은 UID가) 내 테스트 클래스에서 목적을위한 인스턴스 변수로하지만 결국 클래스 정적 내 블록이 매번 실행되는 것처럼 각 메서드 호출에 대해로드되는 것을 발견했습니다.이 UID 손실을 일으키는 것입니다.

파일에 쓰지 않고 읽고 쓸 수 없으면 어떻게해야합니까?

내 제목이 내 요구 사항과 일치하는지 의심 스럽습니다. 누군가 적절하게 수정하십시오.

+1

코드를 표시하십시오. – carlspring

답변

4

각 테스트에는 테스트 클래스의 자체 인스턴스가 있으므로 정적 변수가 필요합니다.

사용이 패턴 :

private static String uuid; 

private void login() { 
    // Run this only once 
    if (null != uuid) return; 

    ... talk to your server ... 
    uuid = responseFromServer.getUuid(); 
} 

@Test 
public void testLogin() { 
    login(); 
    assertNotNull(uuid); 
} 

@Test 
public void someOtherTest() { 
    login(); 

    ... test something else which needs uuid ... 
} 

@Test 
public void testWithoutLogin() { 
    ... usual test code ... 
} 

이 방법 login()가 자체 테스트 있다고, 그것을 필요로 각 테스트에 대해 호출됩니다 있는지 확인합니다 당신은 각각 독립적으로 테스트를 실행할 수 있습니다.

4

JUnit은 각 테스트에 대해 클래스의 새 인스턴스를 만듭니다. 따라서 @BeforeClass 주석이 달린 정적 메소드를 사용하여이 정보를 클래스에 정적으로 설정하고 저장해야합니다.

자세한 내용은 this SO answer을 참조하십시오.

관련 문제