Android 莫基托可以';t验证子方法调用
我在测试方面有点新手,所以请容忍我 我想测试我的onDismiss()方法的行为。我想确保onDismiss()确实调用showDialog()方法。为此,我想验证是否调用了showDialog()中的mock。 我收到一条错误消息,说没有与该模拟交互。如果我在调试模式下运行它,我会看到我们在loadingDialog.show()行上进行了一步,但仍然会出现此错误 问题:Android 莫基托可以';t验证子方法调用,android,unit-testing,mockito,robolectric,Android,Unit Testing,Mockito,Robolectric,我在测试方面有点新手,所以请容忍我 我想测试我的onDismiss()方法的行为。我想确保onDismiss()确实调用showDialog()方法。为此,我想验证是否调用了showDialog()中的mock。 我收到一条错误消息,说没有与该模拟交互。如果我在调试模式下运行它,我会看到我们在loadingDialog.show()行上进行了一步,但仍然会出现此错误 问题: 我想知道,在这种情况下如何测试子方法调用 为什么会这样 (showDialog()已包含在单独的测试中) 测试:
- 我想知道,在这种情况下如何测试子方法调用
- 为什么会这样
sut.onDismiss(mockDialog)
verify(mockLoadingDialog, times(1)).show();
public void onDismiss(DialogInterface dialog) {
showDialog();
}
public synchronized void showDialog() {
loadingDialog.show();
}
代码:
sut.onDismiss(mockDialog)
verify(mockLoadingDialog, times(1)).show();
public void onDismiss(DialogInterface dialog) {
showDialog();
}
public synchronized void showDialog() {
loadingDialog.show();
}
错误消息:实际上,与此模拟没有任何交互。
package junit;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
@RunWith(MockitoJUnitRunner.class)
public class BasicTest {
@InjectMocks
private Basic basic;
@Mock
private LoadingDialog mockLoadingDialog;
@Mock
private DialogInterface dialog;
@Before
public void setUp() throws Exception {
}
@After
public void tearDown() throws Exception {
}
@Test
public void testOnDismiss() {
basic.onDismiss(dialog);
verify(mockLoadingDialog, times(1)).show();
}
}
希望这有帮助
使用@InjectMocks可确保在必要时注入模拟,而不必在设置中初始化模拟。如何注入模拟?您的mock
mockLoadingDialog
仍然必须与loadingDialog
对象相同,只是一个模拟版本,否则,它将如何知道交互?我使用@Mock注释创建模拟对象,并通过构造函数依赖注入将它们传递到类中,我假设您使用构造函数注入的@InjectMocks
在sut
对象上注入?