2.13 部分mock

有时候只需要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)