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