달력

05

« 2012/05 »

  •  
  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  
  •  
DBUnit을 사용하여 테스트를 할 경우 IDataSet을 FlatXmlDataSet으로 할 경우 xml 속성으로 채우기 때문에 사용하기가 무척이나 간편합니다. 하지만 단점이 하나 존재합니다. 바로 null 컬럼이 있을 경우 첫 row가 null이면 다른 row도 값이 있음에도 불구하고 데이터가 들어가지 않아 테스트가 실패하는 경우가 있습니다.

이러한 경우가 발생하는 이유는 FlatXmlDataSet의 경우 첫 row의 컬럼정보를 읽어드려서 모든 row에 적용하기 때문입니다. 때문에 처음에 null 처리를 하기 위해서 해당 컬럼에 대한 데이터를 입력하지 않게 되고, 다른 row에 해당 컬럼이 있음에도 불구하고 데이터가 입력되지 않지요.

간단한 예를 하나 들어보겠습니다. 다음과 같은 테이블이 있다고 합시다.
create table org (
    org_id    integer    not null,
    org_name    integer    not null,
    parent_org_id    integer    null
)

간단한 조직테이블입니다. 조직의 ID와 이름, 그리고 상위 조직에 대한 ID를 가지고 있지요. 이러한 테이블의 경우 최상위 조직은 상위 조직에 대한 ID값이 null일 수 있습니다.

dbunit을 통한 dataset은 다음과 같은 모양을 하고 있습니다.
<dataset>
    <org org_id="1" org_name="최상위부서" />
    <org org_id="2" org_name="하위부서" parent_org_id="1" />
</dataset>

이런 구조일 때 dbunit을 실행하게 되면 두번째 데이터인 하위부서의 상위조직ID가 분명 1이 들어가야하지만 실제로는 들어가지 않게 되지요. 이 문제는 DbUnit.org에서도 언급하고 있습니다.


이 문제를 해결하기 위해서는 위의 링크에서도 언급했듯이 DTD를 작성하면 됩니다. 제일 간단하게는 xml파일에 직접 넣어주면 가장 편합니다.

<!DOCTYPE dataset [
    <!ELEMENT dataset (org*)>
        <!ATTLIST org org_id CDATA #REQUIRED>
        <!ATTLIST org org_name CDATA #REQUIRED>
        <!ATTLIST org parent_org_id CDATA #IMPLIED>
]>

위와 같이 xml 가장 위쪽에 정의해주시면 첫번째 row의 값이 null이 있더라도 정상적으로 동작하게 됩니다. ^^
저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 스쿨쥐
2009/07/01 21:42

JUnit 테스트 조합 테스트도구/JUnit2009/07/01 21:42

public static Test suite() {
    TestSuite suite = new TestSuite();
    // 방법1
    suite.addTestSuite(TestClassOne.class);
    // 방법2
    suite.addTest(TestClassTwo.suite());
    return suite;
}
저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License

'테스트도구 > JUnit' 카테고리의 다른 글

JUnit 테스트 조합  (0) 2009/07/01
환경 설정 코드의 실행 순서(LifeCycle)  (0) 2009/07/01
JUnit 단정 메서드  (0) 2009/06/26
Posted by 스쿨쥐
* JUnit 3.x 버전
1. oneTimeSetup()

2.     setUp()
3.         testMethod1()
4.     tearDown()

5.     setUp()
6.         testMethod2()
7.     tearDown()

8. oneTimeTearDown()

* JUnit 4.x 버전
1. @BeforeClass

2.     @Before
3.         @Test
4.     @After

5.     @Before
6.         @Test
7.     @After

8. @AfterClass
저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License

'테스트도구 > JUnit' 카테고리의 다른 글

JUnit 테스트 조합  (0) 2009/07/01
환경 설정 코드의 실행 순서(LifeCycle)  (0) 2009/07/01
JUnit 단정 메서드  (0) 2009/06/26
Posted by 스쿨쥐
2009/06/26 17:53

JUnit 단정 메서드 테스트도구/JUnit2009/06/26 17:53

▶ 테스트 대상이 되는 메서드가 제대로 동작하는지 아닌지 판단하도록 돕는 헬퍼 메서드(helper method)

1. assertEquals

    - 기본형은 값을 비교하고, Object형은 equals 메서드로 비교한다. 단, 배열형을 위한 equals 메서드는 배열의 내용을 비교하는 것이 아니라 배열 레퍼런스 자체만 비교한다는 점을 주의해야 한다. message는 생략 가능.

1.1 assertEquals([String message], expected, actual)
    - message(옵션) : 테스트가 실패할 경우 출력될 문자열
    - expected : 기대하는 값
    - actual : 테스트 대상이 된 코드에서 실제로 나오는 값

1.2  assertEquals([String message], expected, actual, tolerance)
    - tolerance : 실수형에 대한 오차 한계(double이나 float)
    ex) assertEquals("결과값이 다릅니다.", 0.2, 1.0/4.0, 0.1)


2. assertNull
    - assertNull([String message], java.lang.Object object)
    - assertNotNull([String message], java.lang.Object object)
    - 인자로 넘겨받은 객체가 null인지 (또는 null이 아닌지) 비교하고, 반대인 경우 실패로 처리한다. message는 생략 가능.
 

3. assertSame
    - assertSame([String message], expected, actual)
    - assertNotSame([String message], expected, actual)
    - 같은 객체를 참조하는지 또는 다른 객체를 참조하는지 비교한다.(레퍼런스 비교) message는 생략 가능.


4. assertTrue
    - assertTrue([String message], boolean condition)
    - assertFalse([String message], boolean condition)
    - 참인지 거짓인지 비교한다. message는 생략 가능.
    - assertTrue(true)의 경우 반드시 성공한다. 이것은 어떠한 로직에서 반드시 지나가야하는 부분을 명시적으로 확인할 때 사용한다.


5. fail
    - fail([String message])
    - 테스트를 바로 실패 처리한다. message는 생략 가능. 절대 수행되지 않아야 될 부분(예를들어, 예외가 발생하는 부분 다음)을 표시하는 데 사용한다.
저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License

'테스트도구 > JUnit' 카테고리의 다른 글

JUnit 테스트 조합  (0) 2009/07/01
환경 설정 코드의 실행 순서(LifeCycle)  (0) 2009/07/01
JUnit 단정 메서드  (0) 2009/06/26
Posted by 스쿨쥐