Tests beim extracten von sub value schlägt fehl

Raphael_

Aktives Mitglied
Hi,
ich habe eine Methode, die einen sub wert aus einem JwtAuthenticationToken extrahiert.
Diese sieht so aus:


Java:
public String getSub(JwtAuthenticationToken tokenAttributes) {
        Jwt jwt = (Jwt) tokenAttributes.getPrincipal();
        return jwt.getClaim("sub");
    }

Ich möchte sie nun testen und habe den Test meines Erachtens nach schon korrekt geschrieben allerdings schlägt er fehl. Das ist mein Test:


Code:
@Test
    void testEndpoint() {
        JwtAuthenticationToken tokenAttributes = Mockito.mock(JwtAuthenticationToken.class);
        Jwt jwt = Mockito.mock(Jwt.class);

        Mockito.when(tokenAttributes.getPrincipal()).thenReturn(jwt);
        Mockito.when(jwt.getClaim("sub")).thenReturn("User123");

        String sub = subExtractionService.getSub(tokenAttributes);

        Assertions.assertEquals("User123", sub);
    }

Eigentlich müsste doch alles passen, oder? Ich bekomme einen Fehler, da ich wie man unten sehen kann User123 erwarte, aber null zurückbekomme. Woran könnte das liegen? Stimmt was mit den Mocks nicht?
 

KonradN

Super-Moderator
Mitarbeiter
Evtl. noch etwas ausführlicher:

Du willst diesen Code testen:

Java:
public String getSub(JwtAuthenticationToken tokenAttributes) {
        Jwt jwt = (Jwt) tokenAttributes.getPrincipal();
        return jwt.getClaim("sub");
    }

Dann ist klar, dass Du diesen Teil nicht mocken kannst. Beim Mocken würdest Du ja ein Mock Element schaffen ohne diesen Code. Damit wäre das Testen dieses Codes nicht möglich.

Also wozu denn dann überhaupt mocken?
Du willst genau diesen Code testen. Du willst nicht testen, ob getPrincipal von JwtAuthenticationToken richtig funktioniert. Ebenso willst Du auch nicht getClaim von Jwt testen.

Daher mockst Du diese Teile um dann wirklich Deinen Code (und nur Deinen Code!!) zu testen.

Ich hoffe, dass macht es nun deutlicher, was zu mocken ist und was eben nicht zu mocken ist.
 

Raphael_

Aktives Mitglied
Evtl. noch etwas ausführlicher:

Du willst diesen Code testen:

Java:
public String getSub(JwtAuthenticationToken tokenAttributes) {
        Jwt jwt = (Jwt) tokenAttributes.getPrincipal();
        return jwt.getClaim("sub");
    }

Dann ist klar, dass Du diesen Teil nicht mocken kannst. Beim Mocken würdest Du ja ein Mock Element schaffen ohne diesen Code. Damit wäre das Testen dieses Codes nicht möglich.

Also wozu denn dann überhaupt mocken?
Du willst genau diesen Code testen. Du willst nicht testen, ob getPrincipal von JwtAuthenticationToken richtig funktioniert. Ebenso willst Du auch nicht getClaim von Jwt testen.
Java:
java.lang.NullPointerException: Cannot invoke "com.services.Registration.SubExtractionService.getSub(org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationToken)" because "this.subExtractionService" is null
Daher mockst Du diese Teile um dann wirklich Deinen Code (und nur Deinen Code!!) zu testen.

Ich hoffe, dass macht es nun deutlicher, was zu mocken ist und was eben nicht zu mocken ist.
Ja, da hast du recht, wenn ich alllerdings das @mock weglasse bekomme ich folgenden error, weshalb ich dachte, dass ich das mocken muss.
Java:
java.lang.NullPointerException: Cannot invoke "com.services.Registration.SubExtractionService.getSub(org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationToken)" because "this.subExtractionService" is null
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Spring: Problem beim ausführen eines JUnit Tests. Frameworks - Spring, Play, Blade, Vaadin & Co 4
H Spring Boot Applikation und JHM Benchmark sowie ContextConfiguration in H2 Tests ich bekomme es nicht hin Frameworks - Spring, Play, Blade, Vaadin & Co 2
ExceptionOfExpectation Tests in Spring-Boot Frameworks - Spring, Play, Blade, Vaadin & Co 4
R Keine Code Coverage trotz Validen Tests? Frameworks - Spring, Play, Blade, Vaadin & Co 1
M Integration Tests als Application? Frameworks - Spring, Play, Blade, Vaadin & Co 0
R Probleme beim abfragen von untergeordneten Tabellen Frameworks - Spring, Play, Blade, Vaadin & Co 2
8u3631984 Spring JPA Probleme beim SPeichern von Sets Frameworks - Spring, Play, Blade, Vaadin & Co 3
8u3631984 Spring JDBC Probleme beim Spaltennamen Frameworks - Spring, Play, Blade, Vaadin & Co 3
8u3631984 Problem beim Mocken Frameworks - Spring, Play, Blade, Vaadin & Co 9
8u3631984 Probleme beim Starten von TestContainer Frameworks - Spring, Play, Blade, Vaadin & Co 4
8u3631984 Beim WebMVC Test wird Resource File nicht gefunden. Frameworks - Spring, Play, Blade, Vaadin & Co 1
8u3631984 Cross-Origin beim Abrufen von Spring Endpoint Frameworks - Spring, Play, Blade, Vaadin & Co 1
L Hilfe beim Erstellen einer Java Web Anwendung gesucht Frameworks - Spring, Play, Blade, Vaadin & Co 5
Dimax Spring App Probleme beim Ausführen auf dem Tomcat Server Frameworks - Spring, Play, Blade, Vaadin & Co 1
JanKrieger05 Error beim Speichern von Daten mit nullable JoinColumn Frameworks - Spring, Play, Blade, Vaadin & Co 0
Xentox501 Jump & Run: Beim springen bewegen(rechts,links) Frameworks - Spring, Play, Blade, Vaadin & Co 1
J Resolver für XML Schema Location beim Laden des Spring Application Context Frameworks - Spring, Play, Blade, Vaadin & Co 1
T JTable + JScrollePane Größe "springt" beim resizen des Fensters Frameworks - Spring, Play, Blade, Vaadin & Co 4
E Fehlermeldung von Spring Security beim Einloggen Frameworks - Spring, Play, Blade, Vaadin & Co 1

Ähnliche Java Themen

Neue Themen


Oben