2016-12-01 5 views
0

私は方法があります。単体テストのベストプラクティスは何ですか? モックConnectionとResultSetを作成してメソッドパラメータとしてオブジェクトとして渡すことはできますが、私はそれを愚かでプロフェッショナルな解決策にします。1つのメインメソッドのユニットテスト

public static void playA() { 
    MyObject object = check("cat"); 
    // some stuff... 
} 

private static MyObject check(String s) throws SQLException { 
    // some stuff checking string 
    MyObject o = methodA(s); 
    // some stuff doing on the object 
    return o; 
} 

private static MyObject methodA(String s) throws SQLException { 
    Connection c = MySettings.getConnection(); 
    PreparedStatement ps = c.prepareStatement("select * from Objects where type = ?"); 
    ps.setString(1, s); 
    ResultSet resultSet = ps.executeQuery(); 
    while (resultSet.next()) { 
     // mapping 
     return object; 
    } 
    return null; 
} 

答えて

1

私が取ることは、テストする抽象化のレベルに従うべきだということです。たとえば、SQLのロジックをチェックしたい場合は、ConnectionとResultSetを偽装しても問題ありません。

あなたはできるだけ指向ほとんどのオブジェクトとして、あなたのコードを持ってしてみてください。またhttp://dbunit.sourceforge.net/

のようなユニットテストデータベース用のツールを使用することができ、データベース接続層のテストを正確にしたい場合。それはテストであなたを助けるでしょう(私はそれがおそらく単なる例だと知っていますが)

関連する問題