2011-06-22 13 views
3

私のDAOのJunitテストを書いてみたいが、問題がある。mockitoを使用したクエリテストのパラメータ

public boolean boo(final String param) { 
      final Query query = this.entityManager.createNamedQuery("queryName"); 
      query.setParameter(1, param); 
      boolean isExists = false; 
      if(query.getResultList().size() != 0) { 
       isExists = true; 
      } 
      return isExists; 
     } 

この方法に問題がある:

query.setParameter(1, param); 

私が何か書く

@Test 
    public void test() {   
     when(entityManager.createNamedQuery(queryName)).thenReturn(query); 
     when(query.getResultList()).thenReturn(new ArrayList()); 
     //when(query.setParameter(1,project.getName())).thenCallRealMethod(); 
     projectDao.boo(name); 

    } 

クエリとのEntityManagerを嘲笑しているここで私がテストしたい方法です。 私はNPEを持っていますが、これは驚きではありません。クエリがインターフェイスであるため、メソッドを呼び出すことができません。 テスト中にNamedQueriesでパラメータを設定する最善の方法を教えてもらえますか?あなたはこのようなクエリインターフェイスのモックを作成することになっている

+1

テストしようとしていますか?私は断言は見ませんでした。そしてあなたはあなたの質問をどこから得るのですか?クエリが嘲笑された場合は、NPEを取得すべきではありません。実際のクエリをテストする場合は、統合テストを作成します。通常、DAOを完全にセットアップしなければなりません。 – joostschouten

答えて

6

...

@Test 
public void test() { 

    Query query = mock(Query.class); 

    when(entityManager.createNamedQuery(queryName)).thenReturn(query); 

    ... 

はたぶん、あなたは文字列リテラル「QUERYNAME」の周りに二重引用符を忘れてしまいました。あなたのコードから、上記の最後の行で変数queryNameがどこに定義されているのかわかりません。

関連する問題