gpt4 book ai didi

android - 如何在 void 方法上做 doNothing()?

转载 作者:太空宇宙 更新时间:2023-11-03 11:56:24 27 4
gpt4 key购买 nike

我有一个在其中调用 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
}
}

关于android - 如何在 void 方法上做 doNothing()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31568359/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com