我的测试方法中有一个构造函数调用。我想嘲笑它,因为尝试启动UI。我也模拟了构造函数的输入,但它仍在尝试创建实际实例。
生产代码:
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})