【问题标题】:How to mock the custom util class如何模拟自定义 util 类
【发布时间】:2019-08-20 07:04:42
【问题描述】:

如何模拟自定义 util 类?我收到以下错误:

[ERROR] 2019-08-20 12:06:02:197 [] com.metlife.api.clientlibrary.util.JWSRequestUtil.prepareRequestJWS():71 - Exception in preparing JWS request :: 
java.lang.NullPointerException: null

代码是:

public class EPartnerPromotionHelperTest {
    @InjectMocks
    EPartnerPromotionHelper ePartnerPromotionHelper;

    @Mock
    private  JWSRequestUtil jwsRequestUtil;

    @Before
    public void setUp() throws Exception {
        MockitoAnnotations.initMocks(this);
    }

    @Test
    public void testSavePromotion() throws Exception {

        String loggerId = "loggerId";
        PromotionDTO promotionDTO = new PromotionDTO();
        promotionDTO.setDescription("description");
        promotionDTO.setCreationDate(new Date());
        promotionDTO.setModifiedDate(new Date());

        Mockito.when(jwsRequestUtil.prepareRequestJWS(Matchers.any(EPartnerRestRequestDTO.class)
                ,Matchers.any(Boolean.class))).thenReturn("test");

        PromotionDTO response =ePartnerPromotionHelper.savePromotion(loggerId,promotionDTO);
        assertNotNull(response);
    }
}

【问题讨论】:

    标签: mockito


    【解决方案1】:

    假设错误消息来自您的prepareRequestJWS 方法的调用,您可以更改语法并改用doReturn

    Mockito.doReturn("test")
           .when(jwsRequestUtil)
           .prepareRequestJWS(Matchers.any(EPartnerRestRequestDTO.class), 
                              Matchers.any(Boolean.class));
    

    这样写prepareRequestJWS方法不会被调用,检查doReturn方法的javadoc中描述的Overriding a previous exception-stubbing部分。这也适用于在调用它们时会抛出异常的普通方法。

    但是,一个问题是为什么这个异常首先来自您的JwsRequestUtil 类。随时将相关代码添加到您的问题中。

    【讨论】:

    • 我仍然遇到同样的错误。实际上 prepareRequestJWS() 是 util 类中的静态方法。我也不能使用 PowerMockito。 public static java.lang.String prepareRequestJWS(java.lang.Object类型,布尔加密);有什么想法吗?
    • 如果它是一个static 方法Mockito 不能mock 它。这可能会默默地失败,并调用您的真实方法。如果您发布您的方法,也许我们可以通过模拟参数找到一种方法来获得您想要的结果。否则,您唯一的选择是将方法更改为 non static 或引入另一个依赖项来调用 static 方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-20
    • 2012-05-22
    • 1970-01-01
    • 1970-01-01
    • 2016-01-02
    相关资源
    最近更新 更多