当前位置: 首页 > 知识库问答 >
问题:

测试使用Spring 5 WebClient的类

斜光耀
2023-03-14

我们正在慢慢地将一些项目从使用遗留的RestTemplate类迁移到新的Spring 5 WebClient。作为其中的一部分,我们有一些现有的测试类,这些测试类使用Mockito来验证给定的方法是否会使用模板对endpointX进行GET/POST/whatever。

考虑到WebClient的流畅界面,同样的模拟方法实际上并不实用。我花了一些时间使用WireMock,这很好,但不幸的是,似乎有一个错误,WireMock测试偶尔会溢出或挂起,因此我正在考虑替代方案。

有人对用于验证Spring的WebClient是否正在作为SUT执行的一部分进行预期调用的框架或技术有任何其他建议吗?

共有2个答案

柯升
2023-03-14

MockWebServer听起来很酷。一个合适的例子是:

@ExtendWith(MockitoExtension.class)
class serviceImplTest {

    private ServiceImpl serviceImpl;
    public static MockWebServer mockWebServer;

    @BeforeAll
    static void setUp() throws IOException {
        mockWebServer = new MockWebServer();
        mockWebServer.start();
    }
    
    @AfterAll
    static void tearDown() throws IOException {
        mockWebServer.shutdown();
    }

    @BeforeEach
    void init() {
        String baseUrl = String.format("http://localhost:%s", mockWebServer.getPort());
        serviceImpl = new ServiceImpl(WebClient.builder(), baseUrl);
    }

    @Test
    @DisplayName("whatever")
    void methodName() {
        mockWebServer.enqueue(new MockResponse().addHeader("header", "abcde123")); //MockWebServer will respond with the queued stub.
        String header = serviceImpl.fetchHeader();
        assertThat(header).isEqualTo("abcde123");
    }
}
洪飞白
2023-03-14

Spring实际上使用OkHttp MockWebServer来测试WebClient。

Spring的示例集成测试

您可以设置有序的模拟响应或将模拟响应映射到请求详细信息。

 类似资料:
  • 我有一个简单的Java程序,它使用SpringWebClient发送多个请求。每个都返回一个mono,我使用的是response。subscribe()以检查结果。 但是,我的主执行线程在处理所有请求之前完成,除非我添加一个长线程。睡眠()。 对于CompletableFutures,您可以使用:CompletableFuture。allOf(期货)。join(); 有没有办法等待所有单声道的完成

  • 我有一个groovy脚本,它通过使用readline方法的java.io.Console对象向用户提问。另外,我用它来询问密码(用于设置HTTPS)。如何使用Spock对此代码进行单元测试?目前,它抱怨该对象是Java final对象,无法测试。显然,我不是第一个尝试这个的人,所以我想我会问。 代码的草图如下所示: 我希望单元测试来测试一些模拟响应可以返回,默认值可以返回。注意:这是简化的,这样我

  • 问题内容: 我正在使用JavaScript测试运行程序“摩卡”。 我的测试失败了,因此我将使用进行调试。 但是运行测试时,没有输出(仅来自Mocha的测试结果)。看来Mocha已捕获并抑制了我的输出! 如何让Mocha显示输出?(对于失败的测试)? 编辑: 抱歉!- 在测试期间可以正常工作!我肯定一直期望它抑制输出,而且我没有正确检查自己的代码。感谢您的回应。所以…话虽如此…也许抑制通过测试的输出

  • 我正在写一个简单的测试用例。我使用作曲家安装了代码欺骗。我的测试用例位于测试用例文件夹内的根文件夹中 当我尝试运行以下代码时 当我尝试在浏览器中运行代码时,我得到以下错误 在我的项目中有一个名为yiisoft\yii2-codecsion\TestCase.php的文件 我做错了什么?有人能帮忙吗。?

  • 我正在尝试使用TestNg并行运行测试。我有3个类(两个扩展了BaseTest类的测试类) BaseTest类只有“设置”和“拆卸”,没有其他东西。 当我尝试像这样并行运行测试时,一个带有测试的类运行,而另一个类只打开一个浏览器(但不执行测试) 但是当我从BaseTest类中剪切代码并将其直接放到我的每个测试类中(因此不扩展BaseTClass)时,代码工作,测试并行运行 为什么?我根本没有做任何

  • 问题内容: 建议使用哪些方法来加快测试速度。 当连接断开或发生超时错误等时,我正在测试具有重试功能的网络库。但是,该库在重试之间使用a (因此在服务器重新启动时它不会连接数千次)。这个电话大大降低了单元测试的速度,我想知道有什么方法可以覆盖它。 请注意,我愿意实际更改代码,或使用模拟框架模拟Thread.sleep(),但想先听听您的意见/建议。 问题答案: 通常将与时间相关的功能委托给单独的组件

  • 问题 假如你正在使用 CoffeeScript 并且想要验证功能是否与预期一致,便可以决定使用 Nodeunit 测试框架。 讨论 Nodeunit 是一种 JavaScript 对于单元测试库( Unit Testing libraries )中 xUnit 族的实现,Java, Python, Ruby, Smalltalk 中均可以使用。 当使用 xUnit 族测试框架时,你需要将所需测试的

  • 问题 假如你正在使用 CoffeeScript 写一个简单地计算器,并且想要验证其功能是否与预期一致。可以使用 Jasmine 测试框架。 讨论 在使用 Jasmine 测试框架时,你要在一个参数(spec)文档中写测试,文档描述的是代码需要测试的预期功能。 例如,我们希望计算器可以实现加法和减法的功能,并且可以正确进行正数和负数的运算。我们的 spec 文档如下列所示。 # calculator