我正在尝试在我的应用程序中为Presenter编写单元测试,并且我有以下用例,我不知道如何编写单元测试。
interface ICallback
{
void onConfirm(String str);
}
interface IPopup
{
void show(ICallback callback);
}
class Presenter
{
private IPopup m_popup;
private String m_result;
Presenter(IPopup popup)
{
m_popup = popup;
}
public String getResult() { return m_result; }
void onClick()
{
m_popup.show(new ICallback()
{
@Override
public void onConfirm(String str)
{
m_result = str;
}
});
}
}
函数show
创建一个PopupWindow
,其中有onClick
方法调用ICallback.onConfirm
的确定按钮。
我想测试onConfirm()
内发生的事情,但我不知道如何去做。怎么做到这一点?或者我应该以不同的方式构建我的代码,以便它更友好地测试?
答案 0 :(得分:2)
找到解决方案
我使用ArguementCaptor
来捕获回调,然后调用回调的onConfirm
方法并验证它是否完成了它的工作。
@Mock IPopup m_popup;
@Test
public void callbackTest()
{
String str = "test";
ArgumentCaptor<ICallback> argument = ArgumentCaptor.forClass(ICallback.class);
m_presenter.onClick();
verify(m_popup).show(argument.capture());
argument.getValue().onConfirm(str);
assertEquals(str, m_presenter.getResult());
}
答案 1 :(得分:0)
听起来像Mockito's verify()方法的好例子。现在没时间发布一个正确的例子,但看看这篇文章:
Mockito - what does verify method do?
基本上,您需要在测试中模拟ICallback的实例,并在点击“确定”按钮之后,针对verify()
方法调用onConfirm()
。 (我假设您正在使用Espresso进行UI端单元测试)