将JSONObject作为Mockito模拟方法中的参数

时间:2017-01-22 22:20:29

标签: java json testing junit mockito

我正在尝试使用Mockito来模拟我的JUnit测试方法。该方法将simple-json中的JSONObject作为参数,并使用JSONObject进行响应。我要模拟的方法来自另一个类,我测试的代码调用它。我似乎无法让Mockito接受我的请求并作出相应的回应。我在这里完全遗漏了什么吗?

public class TestClass{
  JSONObject jsonRequest;
  JSONObject jsonReturn;

  AnotherClass anotherClass = Mockito.mock(AnotherClass.class);

  @Before
  public void setUp(){
    jsonRequest = this.readJSONFromFile("jsonRequest.json");
    jsonReturn = this.readJSONFromFile("jsonReturn.json");
    Mockito.when(anotherClass.anotherClassMethod(jsonRequest)).thenReturn(jsonReturn);
  }

  @Test
  public void testMethod(){
     TestClass testClass = new TestClass();
     assertEquals(testClass.method(jsonRequest), jsonReturn);
  }
}

3 个答案:

答案 0 :(得分:2)

您正在嘲笑错误的方法签名。你有method(JSONObject)的模拟设置但是正在调用method(JSONObject, JSONObject)(请注意这两个参数)。您需要模拟双参数方法,或者只在测试中调用单参数方法。

我还建议更改模拟以接受JSONObject的任何实例:

Mockito.when(testClass.method(any(JSONObject.class)).thenReturn(jsonReturn);

最后,正如Mehmudjan Mehmet所提到的,从测试中删除TestClass的新实例,否则你的模拟工作就会失败。您应该使用在测试顶部声明的实例。

答案 1 :(得分:1)

你嘲笑了模拟对象的方法, 但在您的测试类中,而不是使用模拟对象testClass, 你实例化了一个新的TestClass对象,它不会被Mockito拦截。 另外,代码的最后一行看起来不正确,

assertEquals(testClass.method(jsonRequest, jsonReturn));

确定。您的testMethod应该类似于:

@Test
public void testMethod(){
   assertEquals(testClass.method(jsonRequest), jsonReturn);
}

希望这有帮助。

答案 2 :(得分:0)

我认为你错了断言

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="content-type-facet" class="facet">
  <div class="facet-header">
    <h3>Content Type</h3>
  </div>
  <div>
    <span class="facet-percentage" style=""></span>
    <span class="facet-title">Chapter</span>
    <span class="facet-amount">400</span>
  </div>
  <div>
    <span class="facet-percentage" style=""></span>
    <span class="facet-title">Article</span>
    <span class="facet-amount">200</span>
  </div>
  <div>
    <span class="facet-percentage" style=""></span>
    <span class="facet-title">Reference Work Entry</span>
    <span class="facet-amount" id='ciao'>207</span>
  </div>
  <div>
    <span class="facet-percentage" style=""></span>
    <span class="facet-title">Protocol</span>
    <span class="facet-amount">16</span>
  </div>
  <div>
    <span class="facet-percentage" style=""></span>
    <span class="facet-title">Book</span>
    <span class="facet-amount">2</span>
  </div>
</div>