Ändern der privaten Methoden in "protected for testing"

8

Ist es eine gute Idee, die privaten Methoden für den JUNIT-Test als geschützt zu deklarieren?

    
minil 13.04.2012, 13:21
quelle

4 Antworten

9

Es ist manchmal nützlich, ja.

Wenn die Klasse erweiterbar ist, stellen Sie sicher, dass die Methode abgeschlossen ist.

Dokumentieren Sie auch die Tatsache, dass die Methode nicht von Unterklassen oder externen Klassen desselben Pakets aufgerufen werden soll.

Ich verwende die Guava @ VisibleForTesting-Annotation, um klarzustellen, dass die Methode tatsächlich privat sein sollte.

    
JB Nizet 13.04.2012 13:24
quelle
5

Nein im Allgemeinen nicht. Die Idee des Komponententests besteht darin, ... Einheiten zu testen. Oder anders ausgedrückt Implementierungen von Schnittstellenmethoden. Wenn Sie eine Methode testen möchten, die Sie nicht "sehen" können, könnte dies ein Code-Geruch sein. Vielleicht haben Sie Ihre Geschäftslogik nicht genug vom UI-Code oder etwas anderem getrennt.

Die beste Idee wäre also, Ihre Architektur zu überdenken. Aber wenn die Alternative wäre, Ihren Code nicht zu testen, ist es eine gute Idee, diese Methoden zu schützen.

    
Kai 13.04.2012 13:28
quelle
4

Sie können stattdessen das Methodenpaket lokal machen.

Sie können private Methode über Reflektion aufrufen oder Sie können entscheiden, dass private Methoden nicht direkt, sondern nur indirekt getestet werden sollen.

    
Peter Lawrey 13.04.2012 13:25
quelle
1

Obwohl du es vorziehen solltest, die Seite als @ user714965 zu refactorieren, kann PowerMocks MockPrivate das Spott machen, ohne es zu öffnen die Sichtbarkeit Ihrer privaten Methoden.

Wenn Sie Ihre Tests zuerst schreiben, führt das normalerweise zu einem Design, bei dem Sie keine privaten Methoden vortäuschen müssen.

    
nansen 13.04.2012 18:33
quelle

Tags und Links