2013-05-27 3 views
0

있는 방법테스트 나는이 방법을 테스트 할 수있는 방법 JUnit을

public void updateTable() {     
    try { 
     String sql = "select * from userDetails"; 
     rs = st.executeQuery(sql); 
     st = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); 
     table.setModel(DbUtils.resultSetToTableModel(rs)); 
    } 
    catch(Exception e) { 
    } 
+2

문을 인스턴스화하고 예외를 먹지 않은 후에 쿼리를 실행하여 시작하십시오. –

답변

1

몇 가지 제안이 더 테스트 할 수 있도록합니다.

updateTable 방법은 여기에 두 가지 일을하고있다.

  1. 쿼리를 실행하고 얻을 결과는
  2. 테이블에 결과 집합을 적용합니다.

나는 두 가지 방법을 가지고 리팩토링 것입니다. 상기 두 가지 방법에 대한 public ResultSet getResultSetForQuery(String sql,Statement st)

  1. public Table updateTable(ResultSet rs)

테스트 작성 간단해야한다. 좋은 테스트의

+0

'select * from userDetails ";와 같은 쿼리를 테스트하기에는 너무 과한 원자 적 ResultSet getResultSetForQuery (String sql, Statement st) – dantuch

+0

은 값을 추가 할 테스트를 작성하는지 여부에 따라 다릅니다. 그 검사는 무엇을 할 것입니다. ? 스키마 테스트? 또는 DB 드라이버 테스트. –

+0

내 DB 드라이버를 테스트 –

0

두 가지 주요 포인트는

  1. 확인이 그것을 잘 작동

확인 존재인지

  • 오류를 지역화 잘 작동 오류의 경우 현지화 우리가 당신의 방법이 너무 복잡한 일을하기 때문에 존재 않다면 오류를 지역화하는 등 좋은 테스트를 수행 할 수 없습니다 귀하의 경우에는 존재입니다. 그것은 당신의 방법을 여러 가지 방법으로 리팩터링하여 읽기 쉽고 검증 할 수있게하는 데 도움이 될 것입니다. 나는 그 방법을 분리하는 방법에 대해 @AjayGeorge에 동의한다. 데이터베이스 관련 방법을 테스트하는 데 도움이 큰 데이터를 조롱하는 데 사용할 수 많은 자바 라이브러리가 있습니다

    import org.junit.AfterClass; 
    import org.junit.BeforeClass; 
    import org.junit.Test; 
    
    import java.sql.ResultSet; 
    
    public class TestExample { 
    
        @BeforeClass 
        public static void setup() { 
         // init your connection here 
         // and insert data for tests 
        } 
    
        @AfterClass 
        public static void cleanup() { 
         // close connection 
        } 
    
        @Test 
        public void testTableUpdate() { 
    
         // initialize 'sqlQuery' and 'statement' 
    
         ResultSet resultSet = getResultSetForQuery(sqlQuery, statement); 
    
         // check 'resultSet' with JUnit methods like assertTrue 
    
         updateTable(resultSet); 
    
         // check that table is filled as you expected 
        } 
    
    } 
    
  • +0

    을 설치하면 테이블을 지우고 항목을 삽입합니다. 이 방법을 사용하면 항상 같은 데이터 세트로 테스트 할 수 있습니다. – TecHunter

    +0

    좋은 아이디어, 나는 똑같이 할 것입니다. –

    0

    : 같은

    그리고 당신이 쓸 수있는 무언가. 예를 들어, Mockito/EasyMock/JMock 이상. 이 라이브러리를 사용할 수 있습니다. 도구를 사용하여 예상 결과를 조롱 할 수 있으며 예상 결과를 사용하여 메서드를 테스트 할 수 있습니다.

    0

    의 JUnit은 일반적으로 다음과 같은 테스트 클래스를 작성하고 @Test로 테스트를 포함하는 방법 (들) 주석을 달 수 있습니다. 실패해야하는 테스트를 작성하려면 주석의 'expected'속성을 사용할 수 있습니다. 테스트가 너무 오래 실행되고 있고 특정 시간이 지나면 시간 초과가되기를 원한다면 주석에서 'timeout'속성을 사용하십시오.

    시험 방법 전에 초기화 할 특정 논리가있는 경우이를 다른 방법으로 넣고 @Before로 주석을 추가하십시오. 마찬가지로 물건을 풀려면 @After를 사용합니다. 이다 초기화 테스트 클래스에 한 번 를 실행하려면, 주석 @BeforeClass를 사용하는 방법은 공공 및 정적 있는지 확인 - @AfterClass과 같은 이야기. 일반적으로

    ,이 같은 이동 각 시험 방법에 : 코드의 일부를 실행 한 다음 경우로 기대하는 것에 대한 주장을합니다. 내 예에서는 'myAdd'메소드를 테스트 중이며 1 + 1은 최대 2 개를 추가합니다. 2https://github.com/junit-team/junit/wiki 이 대안이 TestNG를 같이 있습니다 : http://testng.org/doc/index.html

    당신이 depdencies 관련하여 특정 클래스의 동작을 테스트하려면, 모의 프레임 워크를 권장

    public class MyTest { 
        @Test 
        public void testAddition() { 
        int sum = myAdd(1, 1); 
        assertEquals(2, sum); 
        } 
    } 
    

    이 예제는 JUnit을 기반으로 . 예 : jmock, mockito 등

    관련 문제