Альтернативное решение состоит в том, чтобы избежать использования ApplicationTestCase
или AndroidTestCase
или любого другого класса, который зависит от Context
. Дело в том, что нет необходимости тестировать SQLite
или ORM
фреймворк, чтобы вы могли создать интерфейс с базовыми CRUD
методами:
public interface UsersManager{
User createUser(String userId);
User getUser(String userId);
boolean updateUser(User user);
boolean deleteUser(User user);
}
И реализовать две версии: одну для тестов и другую для рабочей среды. Версия для тестов может быть легко реализована с помощью HashMap
:
public class TestUsersManager implements UsersManager{
private HashMap<String, User> users = new HashMap();
public User createUser(String userId){
User result = new User(userId);
users.put(userId, user);
return result;
}
//... other methods
}
Работает быстро (без диска IO
в случае SQLite
) и не имеет внешних зависимостей. Кстати, это также дополнительный уровень абстракции: для производственного кода вы можете легко переключаться между ORM
фреймворками, например.