3

daoのJUnitテストを書きたいのですが、問題があります。これが私がテストしたい方法です:

 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でパラメーターを設定する最良の方法を誰かに教えてもらえますか?

4

1 に答える 1

11

このような Query インターフェースのモックを作成することになっています...

@Test
public void test() { 

    Query query = mock(Query.class);

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

    ...

文字列リテラル "queryName" を囲む二重引用符を忘れた可能性があります。あなたのコードから、上記の最後の行で変数 queryName が定義されている場所がわかりません。

于 2011-06-23T20:12:35.753 に答える