2017-04-19 1 views
1

Ich habe mein Spring-Boot-Projekt von 1.3.x auf 1.5.2 aktualisiert. Das Test-Framework hat sich "geändert" und ich versuche meinen Code zu migrieren. Der Antwortstatuscode von der RestTemplate sollte 401 sein, aber wenn ich den Code in die neue "Struktur" ändere, bekomme ich eine 404, nicht gefunden. Irgendwelche Ideen, was fehlt?Spring Boot Test, migrieren von 1.3 auf 1.5

Alter Code:

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(classes = ApiAuthServerApplication.class) 
@WebAppConfiguration 
@IntegrationTest("{server.port:0, server.address:localhost}") 
public class ApiEndpointTests { 

    @Value("${local.server.port}") 
    private int port; 

    private RestTemplate template = new TestRestTemplate(); 

    @Test 
    public void clientsEndpointProtected() { 
     ResponseEntity<String> response = template.getForEntity("http://localhost:" 
       + port + "/uaa/api/v1/oauth/clients", String.class); 
     assertEquals(HttpStatus.UNAUTHORIZED, response.getStatusCode());    
    } 
} 

Der neue Code Ich habe versucht:

@RunWith(SpringRunner.class) 
@SpringBootTest(classes = ApiAuthServerApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) 
public class ApiEndpointTests { 

    @LocalServerPort 
    private int port; 

    private TestRestTemplate template = new TestRestTemplate(); 

    @Test 
    public void clientsEndpointProtected() { 
     ResponseEntity<String> response = template.getForEntity("http://localhost:" 
       + port + "/uaa/api/v1/oauth/clients", String.class); 
     assertEquals(HttpStatus.UNAUTHORIZED, response.getStatusCode()); 
    } 
} 

Auch versucht zu @Autowire die TestRestTemplate und auslassen Hostnamen und Port in den Anforderungen.

+1

sollten Sie nur brauchen, um '@ Autowire' die' TestRestTemplate' stattdessen eine neue Instanz erstellen, sollten Frühlings-Boot dann richtig die URL zu beheben und Sie nennen könnte '/ lf/api/v1/oauth/Kunden'. –

+0

Ich habe dies zuvor versucht, und ich bekomme das gleiche Ergebnis – Filip

Antwort

2

Wenn Sie die WebEnvironment.RANDOM_PORT verwenden, übernimmt das Sprint-Test-Framework die Konfiguration und Einrichtung des Hosts und des Ports. Daher können Sie die Details des Hosts und Ports entfernen. Sie sollten auch die @Autowired-Annotation auf der TestRestTemplate verwenden.

@Autowired for the TestRestTemplate. 

@RunWith(SpringRunner.class) 
@SpringBootTest(classes = ApiAuthServerApplication.class, webEnvironment = 
SpringBootTest.WebEnvironment.RANDOM_PORT) 
public class ApiEndpointTests { 

    @Autowired 
    private TestRestTemplate template = new TestRestTemplate(); 

    @Test 
    public void clientsEndpointProtected() { 
    ResponseEntity<String> response = 
    template.getForEntity("/uaa/api/v1/oauth/clients", String.class); 
    assertEquals(HttpStatus.UNAUTHORIZED, response.getStatusCode()); 
    } 
} 
+0

Geting das gleiche Ergebnis wie zuvor (404 nicht gefunden) in der responseCode – Filip

1

Ich habe es herausgefunden.

Bei der Verwendung von diesem Code:

@RunWith(SpringRunner.class) 
@SpringBootTest(classes = ApiAuthServerApplication.class, webEnvironment = 
SpringBootTest.WebEnvironment.RANDOM_PORT) 
public class ApiEndpointTests { 

    @Autowired 
    private TestRestTemplate template; 

    @Test 
    public void clientsEndpointProtected() { 
    ResponseEntity<String> response = 
    template.getForEntity("/uaa/api/v1/oauth/clients", String.class); 
    assertEquals(HttpStatus.UNAUTHORIZED, response.getStatusCode()); 
    } 
} 

Ich muß auch /uaa entfernen, da dies der Kontextpfad ist. Ich denke TestRestTemplate schließt das auch automatisch mit ein. So ist der endgültige Code, das funktioniert:

@RunWith(SpringRunner.class) 
@SpringBootTest(classes = ApiAuthServerApplication.class, webEnvironment = 
SpringBootTest.WebEnvironment.RANDOM_PORT) 
public class ApiEndpointTests { 

    @Autowired 
    private TestRestTemplate template; 

    @Test 
    public void clientsEndpointProtected() { 
    ResponseEntity<String> response = 
    template.getForEntity("/api/v1/oauth/clients", String.class); 
    assertEquals(HttpStatus.UNAUTHORIZED, response.getStatusCode()); 
    } 
} 
Verwandte Themen