2016-12-12 2 views
1

Я работаю над проектом J2EE, который использует JIRA's REST Client. Этот клиент возвращает объект Jira issue. Некоторые из полей Issue класса key, self, id, summary, и т.д. и т.п. self поле здесь в основном URI.
Для примера http://jira.company.com/rest/api/2.0/issue/12345 У меня есть прецедент, где я должен получить хост из указанного URI.Как выполнить модульный вызов с использованием метода Mockito

Я могу сделать это чем-то вроде issue.getSelf().getHost().
issue.getSelf() возвращает объект типа 'URI', и для получения хоста я могу просто использовать метод getHost(), предоставляемый классом URI, который возвращает URL-адрес хоста в формате String.

Все работает нормально. Я столкнулся с проблемой в модульном тестировании этого фрагмента кода с использованием Mockito. Я не знаю, как издеваться над цепными вызовами метода.

У меня есть следующий фрагмент кода.

private static final String JIRA_HOST = "jira.company.com"; 
@Mock private com.atlassian.jira.rest.client.api.domain.Issue mockIssue; 

@Before 
    public void setup() { 
     when(mockIssue.getSelf().getHost()).thenReturn(JIRA_HOST); 
    } 

Здесь я получаю Null Pointer Exception.

После долгих исследований я узнал, что мне нужно будет использовать @Mock(answer = Answers.RETURNS_DEEP_STUBS) private com.atlassian.jira.rest.client.api.domain.Issue mockIssue;.
Но это также дает мне Null Pointer Exception.

Может кто-нибудь сказать мне, как я могу издеваться над цепными вызовами метода.

+0

Вы можете создать http://stackoverflow.com/help/mcve с фактическим кодом и тестового кода, как мы Что ж. – StackFlowed

+0

@StackFlowed, вы хорошо понимаете, фрагмент кода, который я добавил к описанию, охватывает части 'M',' C' и 'V'. Я не думаю, что абсолютно необходимо вставить весь код, чтобы сделать его исполняемым. Фрагмента кода достаточно, чтобы ответить на вопрос. Я не вижу действительной причины, по которой должен быть предоставлен какой-либо дополнительный код (и я даже не предоставил), чтобы ответить на мой вопрос. –

ответ

2

Вам не нужно RETURNS_DEEP_STUBS или что-то еще, что это за штука. Вы просто должны издеваться каждый объект, который вы хотите, чтобы вернуться в цепи, похожее на это:

@Mock Issue issue; 
@Mock URI uri; 

@Before 
public void setup() { 
    when(uri.getHost()).thenReturn(JIRA_HOST); 
    when(issue.getSelf()).thenReturn(uri); 
} 
+3

Это так хромает. Ребята из Mockito должны создать своего рода @DeepMock. Было бы здорово. –

+0

@ Downvoter - Есть комментарии? – nickb

Смежные вопросы