使用JUnit测试方法

时间:2013-05-27 06:04:52

标签: java testing 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) {
    }

4 个答案:

答案 0 :(得分:1)

很少有建议使其更易于测试。

updateTable方法在这里做了两件事。

  1. 执行查询并获得结果
  2. 将结果集应用于表格。
  3. 我会重构两种方法。

    1. public ResultSet getResultSetForQuery(String sql,Statement st)
    2. public Table updateTable(ResultSet rs)
    3. 为上述两种方法编写测试应该很简单。

答案 1 :(得分:0)

任何良好测试的两个要点是:

  1. 检查它是否正常
  2. 将错误本地化(如果存在)
  3. 检查它是否正常工作 如果错误存在,则将其本地化 在你的情况下,我们无法执行这样一个好的测试来定位错误,如果它存在,因为你的方法工作太复杂了。将您的方法重构为几种方法以使其更具可读性和可测试性是很好的。我同意@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
        }
    
    }
    

答案 2 :(得分:0)

有很多java库可用于模拟大数据以帮助测试数据库相关方法。例如Mockito / EasyMock / JMock等等。您可以使用这些库。您可以使用工具模拟预期结果,并且可以使用预期结果测试方法。

答案 3 :(得分:0)

JUnit:通常,您编写如下所示的测试类,并使用@Test注释包含您测试的方法。如果要编写必须失败的测试,可以使用注释的“预期”属性。如果您知道测试可能运行的时间太长并且希望它在一段时间后超时,请使用注释中的“超时”属性。

如果您在每个测试方法之前有一定的初始化逻辑,那么您将其放入另一个方法并使用@Before注释该方法。同样,为了释放东西,你使用@After。对于每个测试类运行的初始化,使用注释@BeforeClass并确保该方法是公共的和静态的 - 与@AfterClass相同的故事。

通常,在每个测试方法中,你都是这样的:执行一些代码,然后对你期望的情况做出断言。在我的例子中,我正在测试方法'myAdd',我希望1 + 1加起来为2。

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

此示例基于JUnit:https://github.com/junit-team/junit/wiki 还有其他选择,例如TestNG:http://testng.org/doc/index.html

如果要测试某个类与其depdencies相关的行为,建议使用模拟框架。例子包括:jmock,mockito等