Использование контекста в модульном тестировании базы данных SQLite - PullRequest
0 голосов
/ 10 сентября 2018

У меня проблемы с доступом к context , поэтому я могу создать тестовую базу данных. Я не могу найти какие-либо рабочие решения о том, как модульного тестирования базы данных SQLite. Вероятно, поэтому я получаю исключение NullPointerException на

db.addUser(user);

Любые предложения будут с благодарностью. Это мой код до сих пор:

Класс базы данных:

public class Database extends SQLiteOpenHelper {

    private static final int DATABASE_VERSION = 1;
    private static final String DATABASE_NAME = "UserDB";
    private static final String TABLE_USERS = "users";
    private static final String KEY_ID = "id";
    private static final String KEY_USERNAME = "username";
    private static final String KEY_PASSWORD = "password";
    private static final String KEY_EMAIL = "email";
    private static final String[] COLUMNS = {KEY_ID, KEY_USERNAME, KEY_PASSWORD, KEY_EMAIL};

    public Database(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String CREATE_USER_TABLE = "CREATE TABLE users ( " +
                "id INTEGER PRIMARY KEY AUTOINCREMENT, " +
                "username TEXT, "+
                "password TEXT, "+
                "email TEXT )";

        db.execSQL(CREATE_USER_TABLE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        db.execSQL("DROP TABLE IF EXISTS users");
        this.onCreate(db);
    }


    public void addUser(User user){
        Log.d("addUser", user.toString());

        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();

        values.put(KEY_USERNAME, user.getUsername());
        values.put(KEY_PASSWORD, user.getPassword());
        values.put(KEY_EMAIL, user.getEmail());

        db.insert(TABLE_USERS, // table
                null, values);

        db.close();
    }

    public boolean checkLogin(String username, String password) {
        String query = "SELECT * FROM users WHERE username = '"+ username + "' AND password = '" + password+"'";

        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(query, null);

        if(cursor.getCount() <= 0) {
            cursor.close();
            db.close();
            return false;
        } else {
            cursor.close();
            db.close();
            return true;
        }
    }
}

Класс LoginTest:

public class LoginTest {

    Database db;

    @Before
    public void setUp() {
    }


    @After
    public void tearDown() {
    }

    @Test
    public void testSearchDatabase() {
        Database db = new Database(this);
        String testUser = "testUser";
        String testPass = "testPass";
        User user = new User(testUser, testPass,"testEmail@gmail.com");

        db.addUser(user);

        assertTrue(db.checkLogin(testUser, testPass));
    }
 }

1 Ответ

0 голосов
/ 10 сентября 2018

Контекст можно получить с помощью следующего: RuntimeEnvironment.application

Database db = new Database(RuntimeEnvironment.application);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...