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

时间:2017-10-10 09:32:25

标签: java unit-testing powermock

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

1 个答案:

答案 0 :(得分:1)

您应该将SaveAsDialog的实例作为构造函数参数传入您测试的类中。这将使用简单的Mockito模拟它很容易。

如果您想要屈服于糟糕的设计,您必须正确使用 PowerMock ,这意味着您还需要为测试而准备您的课程:

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