Я хочу протестировать активность Android CommentActivity
, которая обычно создает и использует экземпляр CommentsDataSource
(оба класса написаны мной).
public class CommentActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
:
CommentsDataSource = new CommentsDataSource(..);
:
}
:
}
Я хочу создать MockCommentsDataSource
сам и хотел бы избежать использования сторонних фреймворков. (Почему? Потому что я преподаю, пытаясь уменьшить количество информации, которую мне нужно втиснуть в семестр, и количество программного обеспечения, которое нужно установить моим студентам. Я видел другие сообщения, в которых рекомендуются Guice, roboguice и Spring.)
Мой вопрос в том, как передать CommentsDataSource
(или MockCommentsDataSource
) в действие. Кажется нецелесообразным делать их Serializable
или Parcelable
, какими они должны быть, чтобы их можно было передать через Intent
, с которого начинается CommentActivity
. Хотя я мог бы легко передать флаг отладки, его использование потребовало бы, чтобы 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.
Одно из решений, которое пришло мне в голову, — использовать шаблон абстрактной фабрики, поскольку было бы относительно легко сделать фабрики сериализуемыми. Это лучший подход, учитывая мои ограничения?