【问题标题】:Can I do TDD for Android status bar notifications?我可以为 Android 状态栏通知做 TDD 吗?
【发布时间】:2011-08-30 05:28:32
【问题描述】:

为了对涉及 Android 状态栏的代码使用测试驱动的开发原则,我需要编写测试来验证是否已达到预期状态。例如,像下面这样的小单元测试可以让我验证我打算发布的通知是否实际显示:

public class NotificationTest extends AndroidTestCase {

  public void testCanNotify() {
    // setup SUT
    NotificationManager mgr = (NotificationManager) getContext().getSystemService(
            Context.NOTIFICATION_SERVICE);
    Notification notif = new Notification(android.R.drawable.stat_notify_error, "ticker", 0);
    PendingIntent intent = PendingIntent.getActivity(getContext(), 0, null, 0);
    notif.setLatestEventInfo(getContext().getApplicationContext(), "title", "text", intent);
    int id = 123;

    // exercise SUT
    mgr.notify(id, notif);

    // verify result
    // QUESTION: HERE I WOULD LIKE TO SAY:
    // assertTrue(mgr.isShowing(id));

    // teardown
    mgr.cancel(id);
  }
}

因此,如示例所示,通知管理器本身似乎没有任何诊断方法,例如 isShowing(id)get(id) 可用于测试中的“验证”步骤。

我看过优秀的 Robotium 工具包,但它们非常具体地测试单个应用程序,因此它们不包括通知。

有人知道解决办法吗?

【问题讨论】:

    标签: android tdd


    【解决方案1】:

    我通常不会测试第三方或系统 api 是否按预期工作。我将使用模拟 NotificationManager 并验证我的生产代码是否使用正确的参数调用 notifyreal NotificationManager 行为是否正常并不是你真正可以控制的。

    如果NotificationManager 对嘲笑有抵抗力,您可以尝试将其包装在一个您可以控制的瘦类中。

    我测试第三方或系统 API 的唯一时间是文档记录不充分,我需要确认对其行为的猜测。一旦我得到答案,这些测试通常会被丢弃。如果是这种情况,并且您发现使用测试框架进行测试很困难,您始终可以创建一个简单的应用程序并直观地验证结果。

    【讨论】:

    • 谢谢,这对我来说很有意义。其实目的不是为了测试通知管理器,而是我自己的各种活动之间的交叉依赖。我明白你的观点,这最好在模拟环境中完成——我会调查一下。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-06
    • 1970-01-01
    • 2013-07-17
    • 1970-01-01
    • 2016-01-25
    相关资源
    最近更新 更多