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}) 
+0

谢谢蒂莫西 - 脚轮。有效。这是传统代码,我无法改变它。 – Raghu

+0

如果你不能改变它,你需要单位测试什么? –