2014-11-13 4 views
1

테스트 시작시 항목이있는 배열 목록이 있습니다. 테스트하는 동안 항목을 더 추가 한 다음 다른 테스트에서 배열을 지 웁니다. 이제 세 번째 테스트에서 @ 이전 단계 에서처럼 테스트를 수행하기 전에 어레이에 액세스하고 싶습니다.JUnit 테스트를 재설정 할 수 있습니까?

이 작업을 수행하는 것이 가능한지 또는이 작업을 위해 별도의 테스트 파일을 사용해야합니까?

+0

테스트 시작 부분에 @Before로 주석 된 메소드를 호출하지 않는 이유는 무엇입니까? – Squeazer

+1

매 단위 테스트 전에'@ Before'가 실행됩니다. 각 테스트는 개별적으로 실행됩니다. 어떤 테스트가'@ BeforeClass' 주석을 통해 실행되기 전에 한 번 호출되는 함수가있는 방법이 있다고 생각합니다. – thatidiotguy

답변

0

중요한 Junit 테스트 원칙을 기억하십시오. 모든 유닛 테스트는 다른 테스트와 별개입니다.. 즉, 어떤 검사를 다른 순서로 실행해도 상관 없으며 항상 통과해야합니다.

그럼 어떻게해야합니까? 당신이 배열 목록을 채우는 @Before 방법이있는 경우

,이 같은 방법은 외부에서이 배열 목록을 선언

private List<String> myList = new ArrayList<String>(); 

@Before 
public void myMethod(){ 
// do something, fill your list, etc. 
} 

을 그래서, 당신이 배열 목록을 수정하는 필요로하는 경우 테스트를했다면,이 어레이리스트의 사본을 모두에게 가지고 있어야합니다. 앞서 말했던 것처럼 테스트는 실행 순서에 상관없이 테스트를 통과해야하므로 한 테스트에서 물건을 제거하여 다른 테스트를 시작할 수 있다고 가정해서는 안됩니다. 그저 확실한 것은 @Before 메서드가 다른 모든 것보다 먼저 실행된다는 것입니다.

@Test 
public void myTest() { 
List<String> myCopyList = new ArrayList<String>(myList); 
//work with your copy 
} 

이렇게하면 메서드 외부의 목록을 수정하지 않으므로 모든 테스트가 동일한 데이터로 시작됩니다.

건배

1

아마도 @Before에 목록을 채우지 만 새 인스턴스를 만들지는 못하는 것일 수 있습니다.

수정이 다른 시험에 의해 알 수 있도록 ** 위에서

private List<String> value = new ArrayList<String>(); 

@Before 
public void setup(){ 
    // add stuff to list 
} 

모든 테스트가리스트의 동일한 인스턴스를 사용 ** 잘못된 방법.

** ** 오른쪽 방향

private List<String> value; 

@Before 
public void setup(){ 
    value = new ArrayList<String>(); 
    // add stuff to list 
    // or you could clean the list then populate 
} 

시험 간의 가능한 상호 작용이 없기 때문에, 상기 방법은, 각 테스트에 대한 새로운리스트가있다.

관련 문제