J'écris un test d'intégration pour les ressources protégées et je dois donc me connecter, obtenir le jeton de la requête et utiliser le jeton lors du prochain test.Spock testing - Attribuer une valeur de la clause when à la variable locale
Je voulais le faire comme ci-dessous:
@Autowired
private TestRestTemplate restTemplate
private String token
def 'login'() {
given:
final UserData userData = new UserData("User", "Password")
when:
def response = restTemplate.postForEntity('/login', userData, Object)
// assign token to variable
this.token = response.getHeaders().get("Authorization")
then:
response.getStatusCode() == HttpStatus.OK
response.getHeaders().get("Authorization") != null
}
Et je voulais utiliser jeton affecté dans le prochain test, mais je reçois NullPointerException:
def 'request test'() {
final MultiValueMap<String, String> headers = new LinkedMultiValueMap<>()
headers.add("Authorization", token)
final HttpEntity request = new HttpEntity(headers)
when:
def response = rest.exchange('/test', HttpMethod.GET, request, new ParameterizedTypeReference<String>() {})
then:
response.getStatusCode() == HttpStatus.OK
}
Dans ce Le jeton de test a une valeur nulle. Pourquoi et comment puis-je résoudre ce problème?
Vous ne devez pas compter sur des tests en cours d'exécution, ni partager un état entre eux. Pourquoi ne pas extraire ces 3 lignes dans une méthode, et appeler cela dans chaque test pour obtenir un jeton? –