1


DAOクラスから以下のメソッドのjunitテストメソッド(EasyMockとPowerMockを使用)を作成する方法、

public List<MyVo> getSomeValue(final String systemId) {
    //assume template set by @Resource(name = "hibernateTemplate")
    HibernateCallback<List<MyVo>> callback = new HibernateCallback<List<MyVo>>() {
        @Override
        public List<MyVo> doInHibernate(Session session) {
            Criteria criteria = session
                    .createCriteria(
                            EntityClass.class,
                            "main");
            criteria.createAlias("AnotherName",
                    "ColName1");
            criteria.add(Restrictions.eq("pkId",
                    systemId));
            return template.findByCriteria(MyVo.class, criteria);
        }

    };
    return template.execute(callback);
}

私はそれをグーグルで検索しましたが、解決策を得ることができませんでした。
提案してください。
ありがとう。
VAm

4

2 に答える 2

2

このような単体テストでの私の意見では、をモックアウトしようとするのは無意味ですHibernateTemplate。テストでは、特定のメソッドを特定の順序で呼び出し、DAOのソースコードに存在する正確なフィールドを使用して呼び出すだけであるためです。クラス。このタイプのテストはあまり価値がありません。

DBUnitや外部SQLスクリプトなどを使用して、データベースに必要な「事前」条件データを設定し、メモリ内のSQLデータベースに実際 に接続してDAOをテストする方がはるかに優れていると思います。HibernateTemplate次にgetSomeValue()、データベース内のデータを指定して期待値を返すことを表明できます。

HibernateTemplateこれは「統合テスト」のようなものと見なされるかもしれませんが、IMOは、特定のメソッドを特定の順序で呼び出すことだけを主張するモックを使用した役に立たない単体テストよりもはるかに価値があります。

Springは、TestContext Frameworkとともに優れたJDBCテストをサポートしているため、テストにSpringコンテキストをロードし、Beanをテストクラスにワイヤリングするのは非常に簡単です。

于 2012-09-06T15:26:30.190 に答える
1

モックのルールの 1 つは、所有していない型をモックしないことです。

DAO をテストする場合は、単体テストではなく統合テストを作成することで、より多くの価値が得られます。

于 2012-09-06T15:22:42.267 に答える