Я тестирую свое приложение с помощью тестов Android Instrumentation.
Итак, у меня есть расширение класса теста ActivityInstrumentationTestCase2
, которое содержит несколько тестов.Код выглядит следующим образом:
public class ManageProjectsActivityTestextends ActivityInstrumentationTestCase2<ManageProjectsActivity> {
public ManageProjectsActivityTest() {
super("eu.vranckaert.worktime", ManageProjectsActivity.class);
}
@Override
protected void setUp() throws Exception {
getInstrumentation().getTargetContext().deleteDatabase(DaoConstants.DATABASE);
super.setUp();
solo = new Solo(getInstrumentation(), getActivity());
}
@Override
protected void runTest() throws Throwable {
super.runTest();
getActivity().finish();
}
public void testDefaults() {
// My test stuff
}
public void testAddProject() {
// My test stuff
}
}
Таким образом, тестируемое действие содержит список проектов.Список проектов извлекается из базы данных.И когда база данных недоступна, поэтому при создании БД я вставляю один проект по умолчанию.
Так что это означает, что при запуске тестов это то, что я исключаю:
- база данных, если имеется, удаляется на устройстве
- Первый тест запускается (и, таким образом, запускается действие, которое создает мою БД с одним проектом)
- В тестах используется вновь созданная БД,то есть, имея в виду только один проект, во время теста создается второй проект
- Первый тест завершен, и метод setUp () вызывается снова
- База данных, которая должна существовать сейчас,снова удален
- Второй тест запущен (и, таким образом, запускается действие, которое создает мою БД с одним проектом)
- Второй тест также завершается
Но этоне совсем то, что делает этот набор тестов ... Это результат моего набора тестов:
- База данных, если имеется, удаляется на устройстве
- Первый тестзапущен (и таким образомЗапущено действие, которое создает мою БД с одним проектом)
- В тестах используется только что созданная БД, то есть только с одним проектом, во время теста создается второй проект
- Первый тестзавершается и метод setUp () вызывается снова
- База данных, которая должна существовать сейчас, снова удаляется
- И вот оно: Второй тест запущен (но мойБД не создается снова !!!Я также не вижу файла на устройстве ...) и тест должен отображать только один проект в начале, но он отображает уже два !!!
- Второй тест также завершается, но не проходит, потому чтоВ начале у меня есть два проекта ...
Вначале я не переопределял метод runTest (), но подумал, что, возможно, мне следует самому завершить действие, чтобы вызвать повторное создание, ноэто не имеет никакого значения.
Так что кажется, что БД хранится в памяти (так как даже новый файл БД не создается на устройстве, когда я явно удаляю его).Или даже действия, потому что, когда я ставлю точку останова a в onCreate действия, я попадаю туда только один раз для обоих тестов.
Для обслуживания БД я использую ORMLite.Вы можете увидеть мой вспомогательный класс здесь: http://code.google.com/p/worktime/source/browse/trunk/android-app/src/eu/vranckaert/worktime/dao/utils/DatabaseHelper.java
Так что мой вопрос в том, как заставить тесты постоянно использовать разные БД ...?