Whiteship's Note


WebTUnit 사용 시나리오 2. 웹 테스트 + 테스트 메서드 단위 데이터 관리

모하니?/Coding : 2009.05.15 12:50


이번에는 이전 시나리오와 비슷하지만, 테스트 데이터를 클래스 단위가 아니라 메서드 단위 즉, JUnit에서 테스트 단위로 관리하는 방법입니다. 아직은 미완성이라고 볼 수 있는데, 지금 상태에서도 아래와 같이 코딩을 한다면, 이 시나리오가 가능합니다.

@RunWith(WebTestRunner.class)
@WarConfiguration("springsprout")
//@DataConfiguration(fileName="testData.xml")
public class SampleWebTest {

    @WebTest
    public void sinario1(){
        DataManager dm = new DefaultDataManager("integration/sample/testData1.xml", DataType.XML);
        dm.insertTestData();
        System.out.println("test1");
    }

    @WebTest
    public void sinario2(){
        DataManager dm = new DefaultDataManager("integration/sample/testData2.xml", DataType.XML);
        dm.insertTestData();
        System.out.println("test2");
    }

}

@DataConfiguration을 클래스에서 제거하면 되고, 소스코드에서 직접 DataManager API를 사용하여, 테스트 데이터를 넣을 수 있습니다. 위 예제에서는 두 개의 테스트에서 각각 다른 테스트 데이터를 넣고 있습니다.


테스트 데이터를 매번 지우고 싶다면, deleteTestData() 메서드를 이용해도 되지만, insertTestData가 내부적으로 DBUnit의 CLEAN_INSERT를 이용하기 때문에 그럴 필요는 없습니다.

이 코드는 차후에 JUnit 4.7의 인터셉터 기능을 이용해서 개선할 예정입니다. 지금은 스냅샷 정도록 생각해주세요
top


웹 테스트 프레임워크(WebTUnit) 사용 시나리오 1. 웹 테스트 + 테스트 클래스 단위 데이터 관리

모하니?/Coding : 2009.05.15 11:36


해당 테스트 클래스를 웹 테스트 하고, 그 안에 있는 모든 테스트들이 공통의 데이터를 이용할 때 사용할 수 있습니다. 단, 주의할 것은 테스트들 사이에 순서가 없기 때문에(JUnit과 동일) 테스트 데이터를 잘못 조작하면 테스트끼리 의존성 생겨 실패할 수 있습니다. 테스트 마다 각자의 테스트 데이터를 사용하는 시나리오는 다음에 살펴보겠습니다. 이 시나리오는 테스트 데이터를 조작하지는 않고 주로 참조 용으로 테스트 하는 경우에 적당합니다.

@RunWith(WebTestRunner.class)
@WarConfiguration("springsprout")
@DataConfiguration(fileName="integration/sample/testData.xml")
public class SampleWebTest {

    @Before
    public void setUp(){
        System.out.println("===================================");
        System.out.println("===================================");
    }

    @WebTest
    public void test1(){
        System.out.println("test1");
    }

    @WebTest
    public void test2(){
        System.out.println("test2");
        fail("for test");
    }

    @After
    public void tearDown(){
        System.out.println("***********************************");
        System.out.println("***********************************");
    }

    @Test
    public void noTest(){
        System.out.println("this will not be print");
    }

}

이렇게 했을 경우
1. sprignsprout라는 이름의 WAR 파일을 생성하고,
2. 배포하고,
3. integration/sample/testData.xml에 있는 데이터를 DB에 넣고
4. 테스트를 쫙 실행(순서 무작위, JUnit 동작 방식을 따름), 각각의 테스트는 @WebTest를 붙여줌. @Test는 동작하지 않습니다. @Before, @After, @BeforeClass, @AfterClass, @Ignore 모두 적용 됨. 딱 하나. @Test 대신 @WebTest를 사용하면 됨. @Test를 사용해도 되지만, 테스트 구분을 위해.. 차후에 WebTest관련 기능을 추가할 때 유리할 듯..
5. 테스트가 끝나면(중간에 몇 개가 실패하더라도), 테스트 데이터를 삭제하고,
6. WAR를 unploy합니다.

물론 세부적 예외가 언제 발생하느냐에 따라 그 처리가 조금씩 달라집니다. 지금도 계속해서 이부분을 작업하고 있으니 자세한 설명은 나중에~


top