JUnit使用dataBase SQLite错误androidTest

时间:2016-04-05 03:26:32

标签: java android sqlite junit

我尝试在android studio上的阳光应用程序上对DBTest进行不同测试时出错。我不知道发生了什么。

以下是错误消息

junit.framework.AssertionFailedError
at com.example.juandavid.sunshine.data.TestDb.insertLocation(TestDb.java:196)
at com.example.juandavid.sunshine.data.TestDb.testLocationTable(TestDb.java:117)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:554)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1729)


junit.framework.AssertionFailedError
at com.example.juandavid.sunshine.data.TestDb.insertLocation(TestDb.java:196)
at com.example.juandavid.sunshine.data.TestDb.testWeatherTable(TestDb.java:130)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:554)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1729)

我正在学习,这对我来说是一种新的错误,因为我也在尝试同时学习表格,数据库和测试。

以下是代码:

package com.example.juandavid.sunshine.data;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.test.AndroidTestCase;



public class TestDb extends AndroidTestCase {

public static final String LOG_TAG = TestDb.class.getSimpleName();

// Since we want each test to start with a clean slate
void deleteTheDatabase() {
    mContext.deleteDatabase(WeatherDbHelper.DATABASE_NAME);
}

/*
    This function gets called before each test is executed to delete the database.  This makes
    sure that we always have a clean test.
 */
public void setUp() {
    deleteTheDatabase();
}



public void testLocationTable() {
    // First step: Get reference to writable databas
//line 117 com.example.juandavid.sunshine.data.TestDb.testLocationTable
    insertLocation();
}


public void testWeatherTable() {
    // First insert the location, and then use the locationRowId to insert
    // the weather. Make sure to cover as many failure cases as you can.
    deleteTheDatabase(); 
//line 130 com.example.juandavid.sunshine.data.TestDb.testWeatherTable error      when inserLocation called
    long locationRowId = insertLocation();
    assertFalse("Error: Location Not Inserted Correctly", locationRowId == -1L);

    // Instead of rewriting all of the code we've already written in testLocationTable
    // we can move this code to insertLocation and then call insertLocation from both
    // tests. Why move it? We need the code to return the ID of the inserted location
    // and our testLocationTable can only return void because it's a test.

    // First step: Get reference to writable database
    WeatherDbHelper dbHelper= new WeatherDbHelper(mContext);

    SQLiteDatabase db =dbHelper.getWritableDatabase();
    // Create ContentValues of what you want to insert
    // (you can use the createWeatherValues TestUtilities function if you wish)
    ContentValues weatherValues = TestUtilities.createWeatherValues(locationRowId);
    // Insert ContentValues into database and get a row ID back

    long weatherRowId = db.insert(WeatherContract.WeatherEntry.TABLE_NAME, null, weatherValues);
    assertTrue(weatherRowId != -1);
    // Query the database and receive a Cursor back
    Cursor weatherCursor = db.query(
            WeatherContract.WeatherEntry.TABLE_NAME,  // Table to Query
            null, // leaving "columns" null just returns all the columns.
            null, // cols for "where" clause
            null, // values for "where" clause
            null, // columns to group by
            null, // columns to filter by row groups
            null  // sort order
    );

    // Move the cursor to a valid database row
    assertTrue("Error: No records returned from location query", weatherCursor.moveToFirst()); // No se econtro nada
    // Validate data in resulting Cursor with the original ContentValues
    // (you can use the validateCurrentRecord function in TestUtilities to validate the
    // query if you like)
    TestUtilities.validateCurrentRecord("testInsertReadDb weatherEntry failed to validate",
            weatherCursor, weatherValues);

    assertFalse( "Error: More than one record returned from weather query",
                            weatherCursor.moveToNext() );
    // Finally, close the cursor and database
    weatherCursor.close();
    dbHelper.close();
}


public long insertLocation() {


    WeatherDbHelper dbHelper = new WeatherDbHelper(mContext);
    SQLiteDatabase db = dbHelper.getWritableDatabase();

    // Second Step: Create ContentValues of what you want to insert
    // (you can use the createNorthPoleLocationValues if you wish)
    ContentValues testValues = TestUtilities.createNorthPoleLocationValues();

    // Third Step: Insert ContentValues into database and get a row ID back
    long locationRowId;

//Line 196 com.example.juandavid.sunshine.data.TestDb.insertLocation(TestDb.java:196)
    locationRowId = db.insert(WeatherContract.LocationEntry.TABLE_NAME, null, testValues);

    // Verify we got a row back.
    assertTrue(locationRowId != -1);

    // Data's inserted.  IN THEORY.  Now pull some out to stare at it and verify it made
    // the round trip.

    // Fourth Step: Query the database and receive a Cursor back
    // A cursor is your primary interface to the query results.
    Cursor cursor = db.query(
            WeatherContract.LocationEntry.TABLE_NAME,  // Table to Query
            null, // all columns
            null, // Columns for the "where" clause
            null, // Values for the "where" clause
            null, // columns to group by
            null, // columns to filter by row groups
            null // sort order
    );

    // Move the cursor to a valid database row and check to see if we got any records back
    // from the query
    assertTrue( "Error: No Records returned from location query", cursor.moveToFirst() );

    // Fifth Step: Validate data in resulting Cursor with the original ContentValues
    // (you can use the validateCurrentRecord function in TestUtilities to validate the
    // query if you like)
    TestUtilities.validateCurrentRecord("Error: Location Query Validation Failed",
            cursor, testValues);

    // Move the cursor to demonstrate that there is only one record in the database
    assertFalse( "Error: More than one record returned from location query",
            cursor.moveToNext() );

    // Sixth Step: Close Cursor and Database
    cursor.close();
    db.close();
    return locationRowId;
}

}

测试函数insertLocation()不会生成该错误,并且由testLocationTable调用,然后再由testWeatherTable调用。

期待您的回复。

此致 涓

0 个答案:

没有答案