Jak mohu otestovat metodu, která používá ContentProvider s testovacími daty?

hlasů
0

Jsem implementoval a testoval ContentProvider (pomocí ProviderTestCase2) s názvem NumbersProvider. To funguje jako kouzlo.

Teď chci, aby to trvat ještě o krok dále a vyzkoušet následující metodu, která používá ContentProvider (uvnitř třídy nazývá DatabaseUtils), abyste vybrali Boxz lineární seznam krabic s řadou, která je nejblíže k dané číslo:

public static Box selectBox(Context context, int number) {
    Box toReturn = new Box();
    LinkedList<Box> boxes = queryAllBoxes(context);
    int difference = 999999;
    for (Box box: boxes) {
        if (Math.abs(box.getNumber() - number) < difference) {
            toReturn = box;
            difference = Math.abs(toReturn.getNumber() - number);
        }
    }
    return toReturn;
}

Kód vyzývá queryAllBoxes, což je následující:

public static LinkedList<Box> queryAllBoxes(Context context) {
    String[] projection = {NumbersContract.Table.KEY_NUMBERS};
    Cursor cursor = context.getContentResolver().query(NumbersContract.Table.BASE_CONTENT_URI_BOXES, projection, null, null, null, null);
    LinkedList<Box> boxes = new LinkedList<>();
    if (cursor != null) {
        if (cursor.moveToFirst()) {
            int number = Integer.parseInt(cursor.getString(cursor.getColumnIndex(NumbersContract.Table.KEY_NUMBER)));
            String boxName = cursor.getString(cursor.getColumnIndex(NumbersContract.Table.KEY_BOXNAME));
            boxes.add(new Box(number, boxName));
        }
        while (cursor.moveToNext()) {
            int number = Integer.parseInt(cursor.getString(cursor.getColumnIndex(NumbersContract.Table.KEY_NUMBER)));
            String boxName = cursor.getString(cursor.getColumnIndex(NumbersContract.Table.KEY_BOXNAME));
            boxes.add(new Box(number, boxName));
            boxes.add(new Box(number, boxName));
        }
        cursor.close();
    }
    return boxes;
}

V pořádku, takže selectBoxmetoda volána v rámci mé činnosti, pomocí:

Box box = DatabaseUtils.selectBox(MainActivity.getContext());

Otázkou je, jak otestovat tuto metodu s testovacích dat, podobný tomu, co děláte, když jste testování ContentProvider sám?

To je to, co jsem se snažil tak daleko:

Snažil jsem se ji nastavit opět používat ProviderTestCase2. Nicméně, nějak jsem také nutné použít Context(nebo prehaps MockContext?). Nejste si jisti, jak toto nastavení tak, aby se tato metoda bude používat svůj Testdata.

Myslel jsem, že po následující řádek (část třídy AndroidTest která sahá ProviderTestCase2).

public void testBoxSelection() {
    //Setup
    ContentProvider contentProvider = getProvider();        
    contentProvider.bulkInsert(NumbersContract.Table.BASE_CONTENT_URI_BOXES, multipleBoxes);  //multipleBoxes is a LinkedList of Boxes (my test data)

    //Test
    int number = 1;
    String boxName =  BoxOne;
    Box selectedBox = DatabaseUtils.selectBox(???, number);
    assertEquals(testBoxSelection: correct box selected, selectedBox.getBoxName(), boxName);
}
Položena 20/10/2018 v 13:00
zdroj uživatelem
V jiných jazycích...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more