Was ist der beste Weg, um Controller und Services mit JUnit zu testen?

8

Ich habe diesen Spring MVC Controller:

%Vor%

Und dieser Service:

%Vor%

Wie lassen sich die JUnit-Treiber und -Dienste am besten testen, um alle logischen Bedingungen abzudecken? Ich habe immer eine Reihe von Testlinien, um alle logischen Bedingungen abzudecken.

Wir empfehlen die Verwendung von MockitoJUnitRunner? Oder erstellen Sie Klassen, die Konfigurations-Beans erstellen. Und laden Sie sie mit ContextConfiguration 'ContextConfiguration (FooServiceImplTestConfiguration.class classes = {})'

Wie wird das Given-When-Then-Muster implementiert?

    
oscar 14.01.2016, 15:18
quelle

7 Antworten

0

Endlich verwende ich diese Lösung.

Für mein Domainmodell verwende ich diesen Link Ссылка

%Vor%

Ich füge diese Abhängigkeiten zu pom.xml hinzu:

%Vor%

Für meine MVC-Controller verwende ich diesen Link Ссылка

%Vor%

Für meinen JUnit-Diensttest habe ich eine Klasse für die Konfiguration implementiert und lade sie im Servicetest

%Vor%

In meinem pom muss ich diese Abhängigkeiten hinzufügen:

%Vor%

Ich muss die Version meines Hibernate-Validators dafür ändern:

%Vor%

Ich muss diese Abhängigkeiten auch hinzufügen, weil ich diese Ausnahme habe:

Ursache: java.lang.AbstractMethodError: org.hibernate.validator.internal.engine.ConfigurationImpl.getDefaultParameterNameProvider () Ljavax / validation / ParameterNameProvider;

Detailnachricht: org.hibernate.validator.internal.engine.ConfigurationImpl.getDefaultParameterNameProvider () Ljavax / validation / ParameterNameProvider;

%Vor%

Ich benutze Federdaten, ich muss auch meine benutzerdefinierten CrudRepositories testen.

    
oscar 21.01.2016, 14:53
quelle
3

Wenn es darum geht, Controller zu testen (insbesondere Integrationstests), empfehle ich die Verwendung von Spring's MockMVC oder Rest-Assured . Und ein Beispiel für die Verwendung von Rest-Assured in Aktion kann unten gesehen werden:

%Vor%

Zum Testen von Diensten empfehle ich Mockito . Darüber hinaus ist Hamcrest Matchers eine nützliche Bibliothek für Assertionen in Tests. Beispiel für die Verwendung beider unten:

%Vor%     
Rozart 14.01.2016 15:33
quelle
2

Sie sollten beide unabhängig testen.

Erstellen Sie zuerst einen Komponententest für Ihren Service. Sie können Mockito verwenden, um Ihre Dienstabhängigkeit als fooRepository zu verspotten.

%Vor%

Dann sollten Sie einen anderen Komponententest für Ihren Controller erstellen. Der einfachste Weg dazu ist MockMvc im Frühjahrstest bereitgestellt. Und in diesem Fall können Sie Mockito verwenden, um fooService nachzuahmen.

    
Quentin 14.01.2016 15:35
quelle
2

Bester Teil. Verwenden Sie eine Feder-MVC-Testschicht. Da sie ihre eigenen APIs bereitstellen, die Ihnen helfen, Controller zu verspotten und Ihnen Sitzungsobjekte zur Verfügung zu stellen, die Sie mit dem erforderlichen Status füllen können. Sie können viele Beispiele online finden. Ссылка Sie können alle Ihre Schichten separat testen. Alles Gute !!

    
Ashay Jain 14.01.2016 15:42
quelle
1

Sehen Sie sich Frühlings-Test-MVC . Das ist ein Framework für genau diesen Zweck und enthält viele einfach zu verstehende Beispiele.

Persönlich füge ich Mockito / PowerMock der Mischung hinzu, um interne Abhängigkeiten zu verspotten.

Viel Glück.

    
Jan 14.01.2016 15:32
quelle
1

Es hängt davon ab, welche Art von Test Sie implementieren möchten.

Sicher hilft Spring Test dabei. Dieses Modul unterstützt "Unit" - und Integrationstests. Beachten Sie, dass Unit-Tests nicht wirklich echte Unit-Tests sind, da bei der Verwendung von Spring Test ein Minimum an Kontext geladen wird.

Überprüfen Sie MockMvc Klasse, die Sie verwenden können, um Anforderungen an Controller zu stellen.

    
Marco Ferrari 14.01.2016 15:38
quelle
1

Ich denke, der beste Weg ist, ContextConfiguration in Kombination mit DirtiesContext , MockMvcBuilders und Mockito zu verwenden. Dies bietet Ihnen den Vorteil, dass Sie einen Spring-Controller über einen Anwendungskontext erstellen und Beans, deren Verhalten über Mockito definiert ist, injizieren. In diesem Fall können Sie eine hohe Linien- und Bedingungsabdeckung erreichen. Hier ist ein Beispiel für Ihren Code:

%Vor%

DirtiesContext ist wichtig, damit Sie bei jedem Test saubere Mocks erhalten.

    
Schrieveslaach 14.01.2016 15:38
quelle

Tags und Links