首页 > 解决方案 > 如何模拟 Stripe 网络调用以在 Java 中进行测试

问题描述

我正在尝试测试一个进行 Stripe api 调用的函数Plan.retrieve("my_plan_id")。我使用 junit 作为我的测试库和 mockito 作为我的模拟库。这里的问题是这Plan.retrieve()是一个静态方法,而 mockito 不支持模拟静态方法。

我试过Plan像这样嘲笑这个班级。

Plan plan = new Plan();
plan.setId("my_plan_id");
Plan mockedPlan = mock(Plan.class);
when(mockedPlan.retrieve("my_plan_id")).thenReturn(plan);
assertEquals(plan.getId(), myTestedFunction().getId());

这只会导致 Stripe 身份验证异常,因为我从未给 Stripe 提供 API 密钥。

在 java 中模拟 Stripe api 调用以进行测试的正确实现是什么?我似乎找不到任何关于此的信息。

更新

我已经知道 PowerMock,我正在寻找涉及使用 Mockito 的解决方案。Dawood ibn Kareem 几乎回答了我的问题。如果我可以将其标记为已接受的答案,我会的。我承认这是一个非常明显的答案,但由于某种原因,我没有想到。

我也不明白为什么人们不赞成我的问题,这是一个坏问题吗?

标签: javajunitmockitostripe-payments

解决方案


Mockito 不支持 mocking 静态方法,你可以使用 PowerMock 来实现任务。具体来说,您应该查看:https ://github.com/powermock/powermock/wiki/Mockito#mocking-static-method

在这个线程中已经回答了一个类似的问题:Mocking static methods with Mockito


推荐阅读