java - 单元测试回调

标签 java android unit-testing mocking

我正在尝试为我的应用程序中的 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,它有一个 OK 按钮,其 onClick 方法调用 ICallback.onConfirm

我想测试 onConfirm() 中发生的事情,但我不知道该怎么做。如何做到这一点?或者我应该以不同的方式构建我的代码以使其更易于测试吗?

最佳答案

找到解决方案

我使用 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());
}

关于java - 单元测试回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41301261/

相关文章:

java - Eclipse Android Import existing projects 不小心被替换,项目全部消失

android - 关于 android.intent.action.BOOT_COMPLETED

unit-testing - 如何对以事件区域作为输入的函数进行单元测试?

java - BufferedReader 似乎缺少尾随换行符?

java - Apache Flink 测试中是否有像 Reactor 和 RxJava 中那样的虚拟时间概念

java - WEEK_OF_YEAR 在不同机器上不一致

android - Play Integrity本地验证

java - 单元测试 "glue"代码或没有任何真正逻辑的代码

c# - 重构单元测试代码的实践

java - 如何根据列值的类型使 PreparedStatement.setXXX() 动态化