Параметр именованного тестирования запросов с mockito - PullRequest
3 голосов
/ 22 июня 2011

Я хочу написать тест 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 во время тестирования?

1 Ответ

8 голосов
/ 24 июня 2011

Предполагается, что вы создаете макет интерфейса Query, как этот ...

@Test
public void test() { 

    Query query = mock(Query.class);

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

    ...

Возможно, вы забыли двойные кавычки вокруг строкового литерала "queryName". Из вашего кода я не вижу, где переменная queryName определена в последней строке выше.

...