Jim*_*eón 4 testing android unit-testing mockito
我有一个方法可以在其中调用void函数,当我使用时doNothing(),它会说void方法是不允许的.我怎么能doNothing()在那条特定的路线上?
我正在使用这条线,
when(spyColorSelector.initializeColors(view, "red")).then(doNothing());
Run Code Online (Sandbox Code Playgroud)
Dam*_*ils 10
使用Stubber语法:
doNothing().when(spyColorSelector).initializeColors(view, "red");
Run Code Online (Sandbox Code Playgroud)
而且spyColorSelector必须是模拟.
编辑1:使用间谍的代码示例.
initializeColors使用JUnit 4.12和Mockito 1.10.19进行此测试(没有异常抛出):
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");
}
}
Run Code Online (Sandbox Code Playgroud)
编辑2:没有间谍的新例子.
如果你真的不想initializeColors在测试中执行,我认为ColorSelector课堂上有一个设计问题.该initializeColors方法应该在另一个类X中,并且在类中存在类X的依赖关系ColorSelector,您可以在测试中存根(然后不需要间谍).基本示例:
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
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19174 次 |
| 最近记录: |