使用PowerMockito.whenNew()不会被模拟,并调用原始方法
我有一个如下所示的代码:
Class A { public boolean myMethod(someargs) { MyQueryClass query = new MyQueryClass(); Long id = query.getNextId(); // some more code } } Class MyQueryClass { .... public Long getNextId() { //lot of DB code, execute some DB query return id; } }
现在我正在写一个A.myMethod(someargs)
的testing。 我想跳过真正的方法query.getNextId()
,而是返回一个存根值。 基本上,我想嘲笑MyQueryClass
。
所以在我的testing案例中,我使用了:
MyQueryClass query = PowerMockito.mock(MyQueryClass.class); PowerMockito.whenNew(MyQueryClass.class).withNoArguments().thenReturn(query); when(query.getNextId()).thenReturn(1000000L); boolean b = A.getInstance().myMethod(args); //asserts
我在testing类的开头使用了@RunWith(PowerMockRunner.class)
和@PrepareForTest({MyQueryClass.class})
。
但是,当我debuggingtesting,它仍然调用MyQueryClass
类的真正的方法getNextId()
。
我在这里错过了什么? 任何人都可以帮助,因为我是新的Mockito和PowerMockito。
您需要将调用构造函数的类放入@PrepareForTest
注释中,而不是正在构build的类 – 请参阅模拟构build新对象 。
在你的情况下:
@PrepareForTest(MyQueryClass.class)
✓ @PrepareForTest(A.class)
更一般的:
@PrepareForTest(NewInstanceClass.class)
✓ @PrepareForTest(ClassThatCreatesTheNewInstance.class)