【问题标题】:Error in mockito when method方法时模拟错误
【发布时间】:2012-07-30 16:51:42
【问题描述】:

我只是试图存根方法但得到空指针异常。我有点空白这里发生了什么。

我的方法:

OauthStatus validate(HttpServletRequest request, 
            boolean accessTokenRequired) throws OauthProviderException;

而存根是:

Mockito.when(oauthProviderMock.validate((MockHttpServletRequest) Mockito.anyObject(), (boolean)Mockito.anyBoolean())).
                thenReturn(new OauthStatus());

我看到模拟没有错,但抛出空指针异常。

知道这里发生了什么吗?

【问题讨论】:

  • NPE 的堆栈跟踪将很有用。
  • 堆栈跟踪为 Null..just Cause 是 Nullpointer 异常。
  • 您是否尝试过调试器来查看究竟是哪个对象为空?
  • 是的。试过了,但它是 null 的响应 obj ..
  • 你能发布更多你的代码吗?特别是,您如何在oauthProviderMock 创建模拟?

标签: junit4 mockito


【解决方案1】:

将您的演员表移至(MockHttpServletRequest)(boolean),使其看起来像这样

Mockito.when(oauthProviderMock.validate(Mockito.any(HttpServletRequest.class), Mockito.anyBoolean())).
        thenReturn(new OauthStatus());

根据anyObject API,它将返回null,因此您可能会在这里看到您的NPE

根据anyBoolean API,它将返回false,因此不需要强制转换。

【讨论】:

  • 如果我取消对 MockHttpServletRequest 的强制转换,那么它会抱怨,它不适用于 argments Object,boolean。
  • 尝试使用 Mockito.any(HttpServletRequest.class) 作为该参数
  • 我认为 Mockito.anyObject() 也应该可以工作。
【解决方案2】:

解决方法是通过使用匿名类而不是 Mockito 以编程方式模拟该方法。

例如:

  oauthProvider = new OauthProvider(){

      validate( HttpServletRequest req, boolean flag) throws Exception{
           throw new RuntimeException();
       }

 };

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-09
    • 2018-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-14
    • 2019-03-24
    • 1970-01-01
    相关资源
    最近更新 更多