我的测试方法中有一个构造函数调用。我想嘲笑它,因为尝试启动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})

09-27 14:56