EasyMock を使用していくつかの junit テスト ケースを作成しています。これまでのところ、POJO を返すことを期待しているクラスについては理にかなっていますが、それ自体が例外をスローする可能性のある DAO オブジェクトをどのように処理すればよいでしょうか。私のテスト ケースは、DAO で問題が発生したときにスローされる予想される例外をチェックすることです。EasyMock を使用して、DAO オブジェクト (foo
クラスからのテスト) をモックしてみます。下位レベルの DAO 例外を処理する正しい方法は何ですか。
クラス/単純な呼び出しの例を以下に示します: (すべてのゲッター/セッター/コンストラクターが有効で存在すると仮定します)
public class foo{
private daoClass dao = daoClass.getInstance();
public String getValueFromDB(String key) throws DBException{
return dao.lookup(key);
}
}
public class daoClass{ //singleton DAO
public daoClass getInstance(){
//singleton access here
}
public String lookup(String key) throws DBException{
try{
//DB LOGIC
}
catch(Exception e){
throw new DBException(e.getMessage());
}
}
}
クラスをテストしようとするときfoo
、この DBException をテストできるようにしたいと考えています。これをどのように処理すればよいですか? (テストで) try/catch で DAO 呼び出しを回避するか、テストにスローを追加する必要がありますか? それがスローされた場合、テストに合格することはわかってexpected=DBException
いますが、構文的にどのように内部例外を処理する必要がありますか?
テストコードの例:
@Test(expected=DBException.class)
public void testFooError(){
String key = "test";
String value = "expected";
daoClass daoMock = createMock(daoClass.class);
try{
expect(daoMock.lookup(key)).andReturn(value);
} catch (DBException e){
// ???
}
}
expect
がエラーをスローする可能性がある場合の正しい処理方法は何ですか? テスト メソッドthrow
を例外にする必要がありますか、それともtry/catch
使用する必要がありますか? expected=EXCEPTION
テストでタグを使用することはまだ正しいですか?