【发布时间】:2014-03-01 23:38:51
【问题描述】:
我想测试一个 Android 活动 CommentActivity,它通常构造并使用 CommentsDataSource 的实例(这两个都是我编写的类)。
public class CommentActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
:
CommentsDataSource = new CommentsDataSource(..);
:
}
:
}
我愿意自己创建MockCommentsDataSource,并希望避免使用第三方模拟框架。 (为什么?因为我是一名教师,试图减少我需要在学期中填满的信息量以及我的学生需要安装的软件数量。我见过推荐 Guice、roboguice 和 Spring 的other posts。 )
我的问题是如何将CommentsDataSource(或MockCommentsDataSource)传递给活动。将它们设为Serializable 或Parcelable 似乎不切实际,它们必须是它们才能通过以CommentActivity 开头的Intent 传递。虽然我可以轻松传入调试标志,但使用它需要CommentActivity 了解MockCommentsDataSource,这实际上与它无关(并且在单独的应用程序中):
public class CommentActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
:
debugMode = getIntent().getBooleanExtra(DEBUG_MODE, false);
// Get a connection to the database.
final CommentsDataSource cds = (debugMode ?
new MockCommentsDataSource() : // Abstraction violation
new CommentsDataSource(this));
:
}
:
}
我应该如何将MockCommentsDataSource 注入CommentActivity? FWIW,我正在使用 Eclipse 并正在为最新的 SDK 版本进行开发。
我想到的一个解决方案是使用抽象工厂模式,因为使工厂可序列化相对容易。考虑到我的限制,这是最好的方法吗?
【问题讨论】:
标签: android dependency-injection android-testing abstract-factory