【发布时间】:2017-07-17 09:16:33
【问题描述】:
我为受保护的资源编写集成测试,因此我必须登录,从请求中获取令牌,并在下一个测试中使用此令牌。
我想像下面这样:
@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
}
我想在下一个测试中使用分配的令牌,但我得到 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
}
在此测试中,令牌具有空值。为什么以及如何解决这个问题?
【问题讨论】:
-
您不应该依赖按顺序运行的测试,或者在它们之间共享状态。为什么不将这 3 行提取到一个方法中,并在每个测试中调用它以获取令牌?
标签: spring groovy integration-testing spock