我有一个在其中调用 void 函数的方法,当我使用 doNothing()
时,它说不允许使用 void 方法。我如何在该特定行中doNothing()
?
我正在使用这条线,
when(spyColorSelector.initializeColors(view, "red")).then(doNothing());
使用Stubber语法:
doNothing().when(spyColorSelector).initializeColors(view, "red");
spyColorSelector
必须是模拟的。
编辑 1:带有 spy 的代码示例。
此测试适用于 JUnit 4.12 和 Mockito 1.10.19(initializeColors
不会抛出异常):
public class ColorSelectorTest {
@Test
public void testGetColors() {
// Given
String color = "red";
View view = mock(View.class);
ColorSelector colorSelector = new ColorSelector();
ColorSelector spyColorSelector = spy(colorSelector);
doNothing().when(spyColorSelector).initializeColors(view, color);
// When
LinkedList<Integer> colors = spyColorSelector.getColors(color, view);
// Then
assertNotNull(colors);
}
}
class ColorSelector {
public LinkedList<Integer> getColors(String color, View view) {
this.initializeColors(view, color);
return new LinkedList<>();
}
void initializeColors(View view, String color) {
throw new UnsupportedOperationException("Should not be called");
}
}
编辑 2:没有 spy 的新例子。
如果真的不想在测试中执行initializeColors
,我认为ColorSelector
类存在设计问题。 initializeColors
方法应该在另一个类 X 中,并且在 ColorSelector
类中会有 X 类的依赖项,你可以在你的测试中 stub (然后不需要 spy ).基本示例:
public class ColorSelectorTest {
@Test
public void testGetColors() {
// Given
String color = "red";
View view = mock(View.class);
ColorSelector colorSelector = new ColorSelector();
ColorInitializer colorInitializerMock = mock(ColorInitializer.class);
doNothing().when(colorInitializerMock).initializeColors(view, color); // Optional because the default behavior of a mock is to do nothing
colorSelector.colorInitializer = colorInitializerMock;
// When
LinkedList<Integer> colors = colorSelector.getColors(color, view);
// Then
assertNotNull(colors);
}
}
class ColorSelector {
ColorInitializer colorInitializer;
public LinkedList<Integer> getColors(String color, View view) {
colorInitializer.initializeColors(view, color);
return new LinkedList<>();
}
}
class ColorInitializer {
public void initializeColors(View view, String color) {
// Do something
}
}
我是一名优秀的程序员,十分优秀!