PowerMockito.whenNew 未创建模拟实际实例已创建

PowerMockito.whenNew is not creating mock actual instance is created

我在被测方法中有一个构造函数调用。我想嘲笑它,因为它试图启动 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 的实例作为构造函数参数传递给您的 class 被测对象。这将使使用普通 Mockito 进行模拟变得非常容易。


如果你宁愿屈服于你糟糕的设计,你必须正确使用 PowerMock 这意味着你还必须准备你的 class 被测试以进行模拟:

@PrepareForTest({SaveAsDialog.class,YourTestedClass.class})