如何测试此方法:
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) {
}
答案 0 :(得分:1)
很少有建议使其更易于测试。
updateTable
方法在这里做了两件事。
我会重构两种方法。
public ResultSet getResultSetForQuery(String sql,Statement st)
public Table updateTable(ResultSet rs)
为上述两种方法编写测试应该很简单。
答案 1 :(得分:0)
任何良好测试的两个要点是:
检查它是否正常工作 如果错误存在,则将其本地化 在你的情况下,我们无法执行这样一个好的测试来定位错误,如果它存在,因为你的方法工作太复杂了。将您的方法重构为几种方法以使其更具可读性和可测试性是很好的。我同意@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)
答案 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等