2.13 部分mock

作者: 孙兴斌 | 来源:发表于2016-12-27 17:39 被阅读37次

    有时候只需要mock部分方法,这时候可以用new Expectations(object),object可以是实例,也可以是class对象。在replay阶段,如果在Expectation中没有进行record,则会调用原有代码。

    @Test
    public void partiallyMockingASingleInstance() {
      final Collaborator collaborator = new Collaborator(2);
    
      new Expectations(collaborator) {{
         collaborator.getValue(); result = 123;
    
         // 静态方法也可以
         Collaborator.doSomething(anyBoolean, "test");
      }};
    
      // Mocked:
      assertEquals(123, collaborator.getValue());
      Collaborator.doSomething(true, "test");
    
      // Not mocked:
      assertEquals(45, new Collaborator(45).getValue());
    }
    
    • Note:上面的代码中没有出现@Mocked注解

    没有record的方法也可以verify,

    @Test
    public void partiallyMockingA() {
      final Collaborator collaborator = new Collaborator(123);
    
      new Expectations(collaborator) {};
      
      int value = collaborator.getValue(); 
      collaborator.simpleOperation(45, "testing", new Date());
    
      // 没有record也可以verify
      new Verifications() {{ c1.simpleOperation(anyInt, anyString, (Date) any); }};
    }
    

    另一种实现部分mock的方法:同时标注@Tested和@Mocked。

    相关文章

      网友评论

        本文标题:2.13 部分mock

        本文链接:https://www.haomeiwen.com/subject/jedevttx.html