Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何测试OkHttpCall是否使用特定的头执行?_Java_Unit Testing_Junit_Okhttp - Fatal编程技术网

Java 如何测试OkHttpCall是否使用特定的头执行?

Java 如何测试OkHttpCall是否使用特定的头执行?,java,unit-testing,junit,okhttp,Java,Unit Testing,Junit,Okhttp,我有以下课程: class-MyClass{ 私有OkHttpClient httpClient; 私有字符串会话\u id; 公共MyClass(){ this.setHttpClient(新的OkHttpClient()); } 公共字符串getSessionId(){ 返回会话标识; } 公共无效setHttpClient(OkHttpClient httpClient){ this.htttpClient=httpClient; } 公共字符串retrieveUrlContents(字符

我有以下课程:

class-MyClass{
私有OkHttpClient httpClient;
私有字符串会话\u id;
公共MyClass(){
this.setHttpClient(新的OkHttpClient());
}
公共字符串getSessionId(){
返回会话标识;
}
公共无效setHttpClient(OkHttpClient httpClient){
this.htttpClient=httpClient;
}
公共字符串retrieveUrlContents(字符串url、字符串csrfToken)引发异常{
url=this.url.replaceAll(“/$”,“)+“/”+url.replaceAll(“^/”,”);
csrfToken=(csrfToken==null)?“”:csrfToken;
如果(!csrfToken.equals(“”){
long unixtime=System.currentTimeMillis()/1000L;
//AJAX调用还需要提供带有unix时间戳和csrf令牌的uu
url+=“?”u=“+unixtime+”&csrf_-token=“+csrfToken;
}
Request.Builder Request=新建Request.Builder()
.url(url)
.header(“用户代理”、“Mozila/5.0(X11;Ubuntu;Linux x86_64;rv:87.0)Gecko/20100101 Firefox/87.0”);
String session_id=this.getSessionId();
session\u id=session\u id==null?“:session\u id;
如果(!session_id.equals(“”){
request.header(“Set Cookie”,“session_id=“+session_id+”;login_uid=“+Math.random());
}
Response-Response=this.httpClient.newCall(request.build()).execute();
int code=response.code();
如果(代码!=200){
抛出新异常(“url”+url+“返回代码”+代码);
}
String responseBody=response.body().String();
返回响应体;
}
}
我想进行单元测试,如果
getSessionId
实际返回非null或非空字符串,则执行httpCall:

类MyClassTest{
私有静态OkHttpClient mockHttpClient(最终字符串serializedBody,最终布尔json,int代码)引发IOException{
最终OkHttpClient-OkHttpClient=mock(OkHttpClient.class);
最终调用remoteCall=mock(Call.class);
代码=代码<0?200:代码;
最终响应=新响应.Builder()
.request(新建request.Builder().url(“http://url.com“”。build())
.protocol(protocol.HTTP_1_1)
.code(code).message(“”)正文(
ResponseBody.create(
parse(json?“application/json”:“text/html”),
序列化正文
))
.build();
when(remoteCall.execute())。然后返回(response);
当(okHttpClient.newCall(any())。然后返回(remoteCall);
返回okHttpClient;
}
@试验
public void retrieveUrlContentSisreevedWithSessionId()检索的内容{
File File=(新文件(“src/test/resources/csrfInvalid.html”).getAbsoluteFile();
字符串路径=file.getPath();
Scanner fileReader=新扫描仪(文件);
字符串内容=fileReader.useDelimiter(“\\Z”).next();
OkHttpClient=this.mockHttpClient(contents,false,200);
最终Η300sCredentialsRetriever retriever=spy(Η300sCredentialsRetriever.class);
doReturn(“Hello”).when(retriever.getSessionId();
retriever.setUrl(“192.168.2.1”);
retriever.setHttpClient(客户端);
字符串响应=retriever.retrieveUrlContents(“/example.html”);
//测试http调用是否使用SessionId进行了格式化
//其余断言
}
}

我想要的是断言OkHttp3正在使用适当的
Cookie
头执行HttpCall。但是我不知道如何断言HttpCall是用这个头执行的。你知道我如何测试它吗?

一个选项是MockWebServer,看看RecordedRequest,它可以确认你发送的头

  RecordedRequest request1 = server.takeRequest();
  assertEquals("/v1/chat/messages/", request1.getPath());
  assertNotNull(request1.getHeader("Authorization"));