0

このメソッドをテストするにはどうすればよいですか:

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

4 に答える 4

1

これをよりテストしやすくするための提案はほとんどありません。

updateTableメソッドはここで 2 つのことを行っています。

  1. クエリを実行して結果を取得する
  2. 結果セットをテーブルに適用します。

私は2つの方法を持つようにリファクタリングします。

  1. public ResultSet getResultSetForQuery(String sql,Statement st)
  2. public Table updateTable(ResultSet rs)

上記の 2 つのメソッドのテストを書くのは簡単です。

于 2013-05-27T06:11:43.150 に答える
0

データベース関連のメソッドをテストするのに役立つように、大量のデータをモックするために利用できる Java ライブラリが非常に多くあります。たとえば、Mockito / EasyMock / JMockなど。これらのライブラリを利用できます。ツールを使用して期待される結果をモックし、期待される結果でメソッドをテストできます。

于 2013-05-27T07:20:04.433 に答える
0

JUnit: 一般に、次のようなテスト クラスを記述し、テストを含むメソッドに @Test で注釈を付けます。失敗しなければならないテストを書きたい場合は、アノテーションの 'expected' 属性を使用できます。テストの実行時間が長すぎる可能性があり、一定時間後にタイムアウトすることがわかっている場合は、注釈で「timeout」属性を使用します。

テスト メソッドの前に初期化のための特定のロジックがある場合は、それを別のメソッドに入れ、@Before で注釈を付けます。同様に、ものを解放するには、@After を使用します。テスト クラスごとに 1 回実行される初期化の場合、アノテーション @BeforeClass を使用し、メソッドが public かつ static であることを確認します - @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

依存関係に関連して特定のクラスの動作をテストする場合は、モック フレームワークをお勧めします。例: jmock、mockito など

于 2013-05-27T07:32:14.680 に答える
0

優れたテストの 2 つの主なポイントは次のとおりです。

  1. うまく動作することを確認する
  2. エラーが存在する場合は、エラーをローカライズします

正常に動作することを確認する エラーが存在する場合はその場所を特定する あなたのケースでは、メソッドが複雑すぎるため、エラーが存在する場合にその場所を特定するための適切なテストを実行できません。メソッドをいくつかのメソッドにリファクタリングして、読みやすくテストしやすくすることをお勧めします。そのメソッドを分離する方法について@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
    }

}
于 2013-05-27T06:42:25.403 に答える