1

У меня есть приложение, которое использует ContentProvider для обслуживания данных вместо прямого доступа к базе данных. Приложение работает как ожидалось, но у меня проблема с модульными тестами: как заставить ContentProvider использовать тестовую базу данных, а не «живую»? Если бы я не использовал ContentProvider я мог передать другое имя базы данных конструктору моего SQLiteOpenHelper sublass, но теперь база данных создается с помощью вызова OnCreate() в моем ContentProvider:Тестирование устройств Android с помощью ContentProviders и баз данных

@Override 
public boolean onCreate() 
{ 
    UKMPGDataProvider.init(getContext(), Constants.DATABASE_NAME); 
    return (UKMPGDataProvider.getWritableDatabase() == null) ? false : true; 
} 

Как вы можете см., имя базы данных жестко запрограммировано.

Есть ли способ передать тестовое имя в ContentProvider?

ответ

0

После немного копания, я обнаружил, простирающийся ProviderTestCase2 автоматически добавляет префикс в базу данных.

+0

Итак, с ProviderTestCase2, возможно ли мне протестировать поведение MyListContactActivity, не вникая в настоящий Android-контент ContentProvider? У вас есть какой-либо рабочий код тестирования? – sancho21

0

Вы должны использовать dependency injection шаблон, чтобы обойти эту

+0

Спасибо Flexo, но вызов onCreate происходит из системы, поэтому я не могу ничего вводить. Я могу использовать общедоступный флаг, чтобы указать имя базы данных, которую я хочу создать, но это не кажется очень элегантным. – barry

Смежные вопросы