Mockito Spy'ing auf dem zu testenden Objekt

9

Ist es ein Code-Geruch, um ein Objekt auszuspionieren, das getestet wird? Angenommen, ich habe eine Klasse LineCounter , deren Aufgabe es ist, einfach die Anzahl der Zeilen in einer Zeichenfolge zu zählen. -

%Vor%

Nun möchte ich einen JUnit 4-Test schreiben, um die getNumLines -Methode zu testen und dabei den teuren getStringMetadata -Aufruf zu verspotten. Ich entscheide mich dafür, Mockitos Spionage-Mechanismus zu verwenden, damit getStringMetadata einen Dummy-Wert zurückgibt.

%Vor%

Ist das vernünftig? Ich fühle mich ziemlich komisch beim Testen eines Spy-Objekts anstatt der eigentlichen Klasse, aber ich kann mir wirklich keinen Grund dafür vorstellen.

    
Matthew 09.10.2013, 00:37
quelle

2 Antworten

3

Ich werde die Frage in zwei Teilen beantworten. Erstens, es ist Code-Geruch, um die getestete Klasse zu verspotten oder auszuspionieren. Das bedeutet nicht, dass es nicht richtig gemacht werden kann, sondern dass es risikoanfällig ist und möglichst vermieden werden sollte.

WRT Ihr spezifisches Beispiel, ich würde sehen, wie der Spion korrekt verwendet werden konnte, aber das würde auf der Behauptung basieren, dass Sie woanders vollständig Unit-getestet getStringMetadata haben. Das wirft dann die Frage auf, ob Sie getStringMetadata anderswo Unit-getestet haben, dann müssen Sie wissen, wie man es testet und deshalb getNumLines nicht ohne den Spy testen.

All dies wird gesagt, millhouse macht einen guten Punkt, aber so oder so müssen Sie den teuren Code irgendwo testen. Sein Vorschlag hilft Ihnen, den teuren Code zu isolieren und sicherzustellen, dass Sie ihn nur einmal ausprobieren müssen.

    
John B 09.10.2013 10:34
quelle
0

In dieser Situation ist es vollkommen legitim, die Methode, die von der zu testenden Methode aufgerufen wird, zu stubben. Es ist sogar die einzige Möglichkeit, um es isoliert zu testen. Sie wollen einfach keine einzige Methode in ihre eigene Klasse extrahieren, um sie zu testen.

Vorsicht vor den Nebenwirkungen in der Stubbed-Methode. Es reicht möglicherweise nicht aus, den zurückgegebenen Wert zu stubben, wenn die Stub-Methode Nebenwirkungen hat, dann müssen Sie auch die Nebenwirkungen löschen. In einigen Situationen, in denen die Nebenwirkungen sehr komplex sind, könnte es sogar ein Grund dafür sein, aber das wäre höchstwahrscheinlich ein Anzeichen für einen Code-Geruch bei der Implementierung der getesteten Klasse.

Um Ihre Frage zu beantworten, finde ich es einfach Gründe zu finden für es, aber es ist schwierig Gründe gegen zu finden. Es ist die Technik, die ich jeden Tag benutze. Sie hilft mir dabei, meine Implementierung in kleine Methoden zu zerlegen, die individuell in vollständiger Isolation getestet werden, und ich habe bis jetzt keine Einschränkung gesehen.

    
Thomas Naskali 15.03.2016 07:52
quelle

Tags und Links