Ich arbeite an einem J2EE-Projekt, das die JIRA's REST Client verwendet. Dieser Client gibt ein Jira issue
Objekt zurück. Einige der Felder der Issue
Klasse sind key
, self
, id
, summary
, etc etc. Das self
Feld hier im Grunde eine URI ist.
Für zB http://jira.company.com/rest/api/2.0/issue/12345
Ich habe einen Anwendungsfall, wo ich den Host von der oben angegebenen URI abrufen muss.So testen Sie verkettete Methodenanrufe mit Mockito
Ich kann das durch etwas wie issue.getSelf().getHost()
tun.
issue.getSelf()
gibt ein Objekt vom Typ 'URI' zurück und um den Host zu erhalten, kann ich einfach die getHost()
Methode der URI
Klasse verwenden, die die Host-URL im Format String
zurückgibt.
Alles funktioniert gut. Ich stehe vor dem Problem, dieses Stück Code mit Mockito zu testen. Ich weiß nicht, wie man verkettete Methodenaufrufe verspottet.
Ich habe das folgende Code-Snippet.
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);
}
Hier bekomme ich eine Null Pointer Exception
.
Nachdem ich viel geforscht habe, habe ich erfahren, dass ich @Mock(answer = Answers.RETURNS_DEEP_STUBS) private com.atlassian.jira.rest.client.api.domain.Issue mockIssue;
verwenden muss.
Aber das gibt mir auch eine Null Pointer Exception
.
Kann mir jemand sagen, wie ich verkettete Methodenaufrufe verspotten kann.
Können Sie eine http://stackoverflow.com/help/mcve mit dem tatsächlichen Code und Testcode als wir erstellen Gut. – StackFlowed
@StackFlowed, Sie verstehen genau, das Code-Snippet, das ich der Beschreibung hinzugefügt habe, umfasst die Teile 'M',' C' und 'V'. Ich glaube nicht, dass es absolut notwendig ist, den ganzen Code einzubauen, nur um ihn ausführbar zu machen. Das Code-Snippet reicht aus, um die Frage zu beantworten. Ich sehe keinen triftigen Grund, warum zusätzlicher Code zur Verfügung gestellt werden sollte (und ich werde nicht einmal zur Verfügung stellen), um meine Frage zu beantworten. –