有时候只需要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。
网友评论