【问题标题】:mockito - how to check an instance inside a methodmockito - 如何检查方法内的实例
【发布时间】:2014-07-05 22:52:58
【问题描述】:

我是 Mockito 的新手,我正在尝试验证在方法中创建的对象的属性。

伪代码如下:

class A{
   ...    
   public String methodToTest(){
       Parameter params = new Parameter(); //param is basically like a hashmap
       params.add("action", "submit");
       return process(params);
   }
   ...
   public String process(Parameter params){
       //do some work based on params 
       return "done";  
   }
}

我想测试两件事:

  1. 当我调用methodToTest时,process()方法被调用

  2. process() 方法使用正确的参数调用,包含操作 "submit"

我能够验证最终使用Mockito.verify() 可以轻松调用process()。 然而,到目前为止,尝试检查 params 是否包含动作 "submit" 非常困难。

我尝试了以下方法,但它不起作用:(

BaseMatcher<Parameter> paramIsCorrect = new BaseMatcher<Parameter>(){
    @Overrides
    public boolean matches(Object param){
        return ("submit".equals((Parameter)param.get("action")));
    }

    //@Overrides description but do nothing
}

A mockA = mock(A);
A realA = new A();
realA.methodToTest();
verify(mockA).process(argThat(paramIsCorrect))

有什么建议吗?

【问题讨论】:

    标签: java mockito matcher argument-matcher


    【解决方案1】:

    如果你有 verify() 工作,大概只是使用参数匹配器检查参数包含的情况。

    http://docs.mockito.googlecode.com/hg/org/mockito/Mockito.html#3

    上述文档中给出的示例是verify(mockedList).get(anyInt())。你也可以说verify(mockedList).get(argThat(myCustomMatcher))

    顺便说一句,听起来你在嘲笑被测类。我发现这通常意味着我没有清楚地考虑我的课程或考试,或两者兼而有之。在您的示例中,您应该能够测试methodToTest() 是否返回正确的结果,无论它是否调用process(),因为它返回String。 mockito 人有很多关于这类事情的好文档,尤其是“猴子岛”博客:http://monkeyisland.pl/

    【讨论】:

    • 嗨 fbarber 我实际上尝试了 argThat() 但我遇到了各种各样的错误,我尝试了很多东西但从未检查我自己的匹配实现......结果我有一些愚蠢的错误我的碱基匹配器 >.
    【解决方案2】:

    只需将Parameter 作为构造函数参数传递给A 类的构造函数,然后在您的测试中使用Parameter 的模拟实例/实现并在模拟中验证。这就是它通常的做法——你分离你的类并使用构造函数注入来组合它们,这使你能够传递模拟以进行测试(它还允许重新连接应用程序并更容易地交换一些公共资源)。

    如果您需要在每次函数调用时创建 Parameter,您应该使用创建 Parameter 实例并将其传入的工厂。然后您可以验证工厂以及工厂创建的对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-09
      • 1970-01-01
      • 2021-12-24
      相关资源
      最近更新 更多