【发布时间】:2012-04-19 05:35:07
【问题描述】:
对 android 应用程序进行单元测试通常比预期的要困难,因为有些类没有公共构造函数(如 NotificationManager),有些类具有无法覆盖的方法,如 Context.getText。
对于 NotificationManager,我使用了委托人。我会对上下文做同样的事情,但这意味着在所有使用上下文(很多)的类中,我需要使用我自己的上下文,甚至不能从上下文派生。然后,每当我需要将上下文传递给 Android API 时,我都需要从我的包装器中获取真正的上下文。
这是正确的吗?还有另一种方法吗?将这些方法声明为 final 的理由是什么? 是否有人真正为 Android 的大型应用程序编写过单元测试?
编辑
我找到了为什么 getText 方法被定义为 final 的原因:它是一个模板方法。所以覆盖调用的非final方法就足够了
我还发现 this 有效,但有点奇怪
【问题讨论】:
-
我也使用自定义的 android.app.Application 并认为进入测试项目时非常方便,您可以在这里定义许多应用程序范围的变量并通过 getter/setter 在测试中获取/设置这些变量Project,获取高度可配置的应用程序对象,很像模拟上下文。有什么奇怪的?也许您可以打开另一个问题进行进一步讨论。
标签: android unit-testing