테스트 시작시 항목이있는 배열 목록이 있습니다. 테스트하는 동안 항목을 더 추가 한 다음 다른 테스트에서 배열을 지 웁니다. 이제 세 번째 테스트에서 @ 이전 단계 에서처럼 테스트를 수행하기 전에 어레이에 액세스하고 싶습니다.JUnit 테스트를 재설정 할 수 있습니까?
이 작업을 수행하는 것이 가능한지 또는이 작업을 위해 별도의 테스트 파일을 사용해야합니까?
테스트 시작시 항목이있는 배열 목록이 있습니다. 테스트하는 동안 항목을 더 추가 한 다음 다른 테스트에서 배열을 지 웁니다. 이제 세 번째 테스트에서 @ 이전 단계 에서처럼 테스트를 수행하기 전에 어레이에 액세스하고 싶습니다.JUnit 테스트를 재설정 할 수 있습니까?
이 작업을 수행하는 것이 가능한지 또는이 작업을 위해 별도의 테스트 파일을 사용해야합니까?
중요한 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
}
이렇게하면 메서드 외부의 목록을 수정하지 않으므로 모든 테스트가 동일한 데이터로 시작됩니다.
건배
아마도 @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
}
시험 간의 가능한 상호 작용이 없기 때문에, 상기 방법은, 각 테스트에 대한 새로운리스트가있다.
테스트 시작 부분에 @Before로 주석 된 메소드를 호출하지 않는 이유는 무엇입니까? – Squeazer
매 단위 테스트 전에'@ Before'가 실행됩니다. 각 테스트는 개별적으로 실행됩니다. 어떤 테스트가'@ BeforeClass' 주석을 통해 실행되기 전에 한 번 호출되는 함수가있는 방법이 있다고 생각합니다. – thatidiotguy