以下在Mockito 1.9.0和JUnit 4.8.2下运行,不会向我的控制台打印任何内容:
import static org.mockito.Mockito.*;
import org.junit.Test;
public class TestNonCall {
public class TestClass {
public String test() {
System.out.println("test called!");
return "test";
}
}
@Test
public void doTest() {
final TestClass mock = mock(TestClass.class);
when(mock.test()).thenReturn("mock!");
}
}
此外,如果我在test()方法中放置一个断点,它永远不会被击中.
也许发布更多代码?看起来你的例子不够复杂,无法证明你遇到问题的行为.
另外:你使用的是最新版的Mockito吗?
编辑:新想法:你嘲笑最后的方法吗?
如果向正在模拟的方法添加最终修饰符,则会获得您报告的行为.
这是因为Mockito不会模拟最终和静态方法.相反,它将调用委托给真正的实现.
您的实际代码可能会试图模拟最终方法吗?
如果是这样,你可以使用PowerMock,它是Mockito的扩展,允许模拟最终方法.
您需要将以下注释添加到测试用例类:
@RunWith(PowerMockRunner.class)
@PrepareForTest(TestClass.class)
public class TestNonCall {
// ...
}
并在测试方法中使用PowerMock方法模拟类:
final TestClass mock = PowerMockito.mock(TestClass.class);
然后照常进行.