问题标签 [mockwebserver]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
203 浏览

spring-boot - 调用 MockWebServer 时无法访问 ExternalResource

我无法让MockWebServer正常工作。我将依赖项添加到 build.gradle

testImplementation 'com.squareup.okhttp3:mockwebserver:4.2.0'

我有以下课程(我从这里复制https://codingtim.github.io/webclient-testing/

我的测试课看起来像这样

但是,当我尝试运行测试时出现以下错误

ApiCallerTest.java:19:错误:无法访问 ExternalResource private final ApiCaller apiCaller = new ApiCaller(WebClient.create(mockWebServer.url("/").toString()));

知道可能出了什么问题吗?

0 投票
0 回答
362 浏览

mockito - 如何使用 MockWebServer Android 测试用例模拟两个 API

我正在执行仪器测试,因为我正在调用其中一个在创建活动时调用 2 个 API 的活动。

现在我想为此活动编写仪器测试用例,我必须使用 mockito 的mockWebServer来模拟 API 响应。当我调用一个 API 时,我的模拟代码可以正常工作,但是当同时调用两个 API 时它会失败。

即使有另一种情况,假设我们有 API 来获取最近的消息数据,但在此之前,我们总是通过发送刷新令牌 来验证用户。在这种情况下,我们需要调用对用户进行身份验证的 API,然后调用另一个 API 来获取消息数据。因此,我们需要一个接一个地调用 2 个 API,比如说在一个方法中。在编写该单一方法的测试用例时,我将如何模拟身份验证 API 响应和消息 API 响应?

我应该如何处理这个问题?有没有其他方法来处理我们需要同时调用多个 API 的情况?

此外,我已经使用SystemClock.sleep(4000);了我的回调异步执行。

下面是我模拟 API 的代码:

任何帮助表示赞赏。提前致谢。

0 投票
1 回答
340 浏览

android - 作为 UI 测试的一部分,在 Application 类中进行的模拟 API 调用

背景:

我们的 Android 应用程序 onCreate 启动了一些初始化用例,这些用例执行一些网络 API 调用。

同时,启动了我们的 LAUNCHER Activity。

在我们的 UI 测试中,我们使用 MockWebServer 来存根 API 响应,我们使用 ANDROIDX_TEST_ORCHESTRATOR 1.1.1

问题:

在涉及 Main Activity 的 UI 测试中,我们希望从测试中为初始化 API 调用存根不同的响应。

换句话说,每个测试都应该能够指定初始化 API 调用返回的响应。

但是,由于初始化服务在 Activity 之前启动,并且 UI 测试中的所有代码在应用程序启动之后运行。我们无法影响之前发生的反应。

问题:

有没有办法从测试中手动启动应用程序,就像我们可以对 Activity 使用 ActivityTestRule 一样?这将允许我们根据测试的要求存根初始化 API 调用,然后启动应用程序。

0 投票
1 回答
4899 浏览

spring - 在模拟第三方 API 时获取“reactor.netty.http.client.PrematureCloseException:连接在响应之前提前关闭”

我的 Spring Boot API 正在使用 WebClient 使用第三方 API

演示API控制器

演示服务.java

我已经使用 MockWebServer 模拟了第三方 API。当我尝试使用 mockMvc.perform(...) 测试 API 时。我的断言按预期工作。但是在关闭 MockWebServer 时,我收到以下异常

我的测试用例

我尝试了其他启动溢出帖子中提到的所有解决方案,但仍然遇到相同的错误。任何帮助表示赞赏。

0 投票
1 回答
1330 浏览

android - 是否可以为我的测试返回 http 响应代码 = 200?

我开始我的仪器测试来检查我的活动。当按下 Activity 上的按钮然后调用 http 请求。所以我测试点击

这里日志:

它工作正常。请求的正文内容“type”:1”。因此测试通过了。很好。

但我的活动(创建时))在后台定期(每 5 秒)启动下一个 http 请求:

如您所见,在我的测试运行 POST之前GET http://127.0.0.1:8081/event?orgn=17开始 ,结果状态 200 返回不是我的测试的 http 请求。http://127.0.0.1:8081/event?table_token=11&device_id=111111

结果我的测试失败了。是否可以准确地为我的测试返回 http 响应代码 = 200 ?

0 投票
1 回答
849 浏览

android - 未解决的超类型:将 MockWebServer 与 Junit 5 一起使用时的 org.junit.rules.ExternalResource

我正在使用 MockWebServerokhttp3

当我尝试使用此代码时:

我得到错误:

e:无法解析以下类的超类型。请确保您在类路径中有所需的依赖项:class okhttp3.mockwebserver.MockWebServer,未解析的超类型:org.junit.rules.ExternalResource

我找到了这个对话,但它无助于解决问题。

0 投票
1 回答
239 浏览

android - RxJava blockingFirst/Single 在 JUnit 5 Retrofit 测试中返回错误异常

下面的测试预计会返回 HttpException,但它会返回 RuntimeException。

失败测试的日志是

信息:MockWebServer[54339] 收到请求:GET /users/test/repos HTTP/1.1 并响应:HTTP/1.1 500 服务器错误 2020 年 2 月 7 日晚上 9:20:11 okhttp3.mockwebserver.MockWebServer acceptConnections 信息:MockWebServer[54339]完成接受连接:套接字已于 2020 年 2 月 7 日晚上 9:20:11 关闭 http3.mockwebserver.MockWebServer$serveConnection$$inlined$execute$1 runOnce INFO:MockWebServer[54339] 来自 /127.0.0.1 的连接失败:java.net.SocketException:插座关闭

org.opentest4j.AssertionFailedError:引发意外的异常类型==> 预期:com.jakewharton.retrofit2.adapter.rxjava2.HttpException 但为:java.lang.RuntimeException

0 投票
0 回答
2196 浏览

android - NoSuchFieldError:在仅 kotlin 模块中使用 MockWebServer 时的伴侣

我有一个模块化项目,其中 api 层被分成自己的模块。由于它不依赖于 Android SDK,因此我将其设为仅 kotlin 的模块。这在构建文件中有如下所示的 kotlin jvm 插件。当我尝试使用 MockWebServer 时,这会导致 java.lang.NoSuchFieldError: Companion 错误(只有这个,其他一切正常)。

在构建文件中使用 kotlin dsl,build.gradle.kts 文件如下所示:

这是我的单元测试的片段。我实例化 MockWebServer() 的行失败并出现 NoSuchFieldError: Companion:

和堆栈跟踪:

经过各种实验,我发现了以下内容:

  • 将 okhttp3 库回滚到版本 3.xx 可以消除此错误,但随后我失去了许多需要的 okhttp3 功能,例如拦截器、身份验证器等。
  • 我相信改造使用 okhttp3 3.14,但是在我尝试使用 MockWebServer 之前,我对使用 4.4.0 的 okttp3:logging-interceptor 没有任何问题
  • 当我将模块切换到 kotlin android 模块时,它按预期工作。因此将构建文件更改为以下内容:

工作 build.gradle.kts:

我的直觉告诉我,与仅使用 kotlin jvm 编译器相比,kotlin android 使用 Companion 对象或静态方法等编译 Kotlin 的方式存在一些差异,但我承认对“幕后”发生的事情知之甚少有了这一切。

如何使用 kotlin("jvm") 插件让 MockWebServer 在仅限 kotlin 的模块中工作?

0 投票
1 回答
602 浏览

android - MockWebServer 不抛出自定义异常改造

我正在实现 mockWebServer,它适用于 200 次调用,但是当我尝试获取异常时,我得到了这个异常:

线程“OkHttp Dispatcher”中的异常 java.lang.Error: com.myproject.something.errors.MyException$ServerUnavailable at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1155) at java.util.concurrent.ThreadPoolExecutor$ Worker.run(ThreadPoolExecutor.java:624) 在 java.lang.Thread.run(Thread.java:748)

和这个

引起:com.myproject.something.errors.ServerException$ServiceUnavailable at com.myproject.something.errors.MyException$ServerUnavailable.(ServerException.kt:6) at com.myproject.ErrorInterceptor.intercept(IntegrationTest.kt:86)

我有这个错误拦截器用于假改造

而且我正在正确地排队呼叫,我只是发送一个 503 作为响应......

这是我的测试

我在那里想念什么?

0 投票
1 回答
886 浏览

android - 有没有办法修复 MockWebServer 的端口

我正在尝试使用 MockWebServer 来运行我的 Android 测试用例。我正在使用 server.url("/") 设置路径,但我试图弄清楚是否有任何方法可以修复端口,因为它会不断变化。