【问题标题】:How to ignore a toast in JUnit tests?如何忽略 JUnit 测试中的祝酒词?
【发布时间】:2017-07-27 14:39:07
【问题描述】:

我想在片段中测试一个方法,但在这个方法中我调用了一个 Toast:

Toast.makeText(getActivity(), getString(R.string.signs), Toast.LENGTH_SHORT).show();

现在我想用 JUnit 和 Powermockito 测试该方法。为此,我想忽略吐司。我是这样尝试的:模拟 Toast 并忽略 toast.show()

Toast toastMock = mock(Toast.class);
doReturn(toastMock).when(Toast.makeText(any(Activity.class), anyString(), Toast.LENGTH_SHORT));
doNothing().when(toastMock).show();

但是我总是得到一个 RuntimeException,因为我调用 Toast 时没有创建一个新的 toast 对象。如何绕过这个问题?

【问题讨论】:

  • 你能添加完整的测试用例吗?也使用 PowerMockito 设置
  • 您正在尝试模拟静态方法,您要么必须将静态调用包装到可以模拟的非静态类中,要么模拟您可以找到的静态方法在这里帮助stackoverflow.com/questions/10583202/…

标签: java android unit-testing mockito


【解决方案1】:

使用负责显示Toast 的方法编写外部类,将其注入fragment 并模拟此类行为。它可能是一个静态方法,因为您使用PowerMockito

如何注入?使用DaggerToothpick

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-28
    • 1970-01-01
    • 2017-01-26
    • 2021-12-12
    相关资源
    最近更新 更多