PowerMockito.whenNew没有创建模拟实际实例创建
问题描述:
我在我的方法测试中有一个构造函数调用。我想嘲笑它,因为试图启动一个用户界面。我嘲笑了构造函数的输入,但它仍然试图创建实际的实例。PowerMockito.whenNew没有创建模拟实际实例创建
产品代码:
public void methodToTest() {
SaveAsDialog sd = new SaveAsDialog(getSite().getShell());
sd.setOriginalFile(file);
sd.open()
}
测试代码:
Shell mockShell=Mockito.mock(Shell.class);
IEditorSite site = Mockito.mock(TestEditorSite.class);
Mockito.when(site.getShell()).thenReturn(mockShell);
SaveAsDialog dialogMock=Mockito.mock(SaveAsDialog.class);
PowerMockito.whenNew(SaveAsDialog.class).withArguments(site.getShell()).thenReturn(dialogMock);
我错过任何东西在这里,当SaveAsDialog sd = new SaveAsDialog(getSite().getShell());
行称为它正在创建实际的实例。
我正在我的测试与
@RunWith(PowerMockRunner.class)
@PrepareForTest({SaveAsDialog.class})
答
你应该通过在SaveAsDialog
实例到类测试作为构造函数的参数。这会使用简单的Mockito嘲笑它很容易。
如果你更想臣服于你的设计不好,你必须正确地使用PowerMock这意味着你还需要调制机测试下你的类嘲讽:
@PrepareForTest({SaveAsDialog.class,YourTestedClass.class})
谢谢蒂莫西 - 脚轮。有效。这是传统代码,我无法改变它。 – Raghu
如果你不能改变它,你需要单位测试什么? –