【发布时间】:2015-12-07 10:43:52
【问题描述】:
我正在使用 Mockito 编写一些测试用例。我遇到一个问题,我在网上寻找解决方案,但没有找到明确的答案。
鉴于以下类,我想模拟对方法 getMessage 的所有调用
在此类型的所有实例上的 ClassB 上。
public class ClassA {
private ClassB b = new ClassB("From ClassA");
int methodToTest() {
System.out.println("methodToTest use instqnce ClassB " + b.getMessage());
return -1;
}
}
class ClassB {
private String message;
/**
*
*/
public ClassB(final String msg) {
this.message = msg;
}
/**
* @return the message
*/
public String getMessage() {
return message;
}
/**
* @param message the message to set
*/
public void setMessage(final String message) {
this.message = message;
}
}
我试过但没用的如下:
public class ClassATest {
@Test
public void testOK1() {
ArgumentCaptor<ClassB> captorClassB = ArgumentCaptor.forClass(ClassB.class);
Mockito.doReturn("MOCK message").when(captorClassB.capture()).getMessage();
ClassA a = new ClassA();
assertTrue(a.methodToTest() == -1);
}
@Test
public void testOK2() {
Mockito.doReturn("MOCK message").when(Mockito.any(ClassB.class)).getMessage();
ClassA a = new ClassA();
assertTrue(a.methodToTest() == -1);
}
}
我的问题首先是它是否可能。其次,怎么做?我要重构代码吗?
【问题讨论】:
标签: unit-testing junit mocking refactoring