Size: a a a

StartAndroid Ru Testing

2018 August 07

НК

Николай Казаков in StartAndroid Ru Testing
* Метод, проверяющий доступность БД
  * @param ctx - контекст
  * @return - true/false
  */
 public boolean checkDataBase(Context ctx) {
   SQLiteDatabase checkDB = null;
   try {

     String dbPath =getDbPath(ctx);
     Log.d(LOGTAG, "checkDataBase=" + dbPath);
     File file = new File(dbPath);
     if (file.exists() && !file.isDirectory()) {
       checkDB = SQLiteDatabase.openDatabase(dbPath, null, SQLiteDatabase.OPEN_READONLY);
     }

   } catch (SQLiteException e) {
     Log.d(LOGTAG, e.getMessage());
   }

   if (checkDB != null) {
     checkDB.close();
     return true;
   }
   else {
     return false;
   }

 }
источник

НК

Николай Казаков in StartAndroid Ru Testing
private String getDbPath(Context ctx) {
   return ctx.getFilesDir().getPath() + ctx.getPackageName() + "/databases/mydb";
 }
источник

W

WaterSmith in StartAndroid Ru Testing
ну вот
источник

W

WaterSmith in StartAndroid Ru Testing
контекст то у тебя мокнутый
источник

НК

Николай Казаков in StartAndroid Ru Testing
ну да
источник

W

WaterSmith in StartAndroid Ru Testing
вот и приши: when(mockContecst.getFilesDir()).thenReturn(mockFile);
when(mockContecst.getPackageName()).thenReturn("mypackage");
when(mockFile.getPath()).thenReturn("path");
источник

W

WaterSmith in StartAndroid Ru Testing
и всё, твой приватный getDbPath отработает с твоим мокнутым контекстом, и вернет то что тебе надо
источник

НК

Николай Казаков in StartAndroid Ru Testing
т.е. в when мы можем делать заглушки на любой объект, которыйй затрагивается в тесте не последовательно вызывать методы, например testApp.getDbPath ?
источник

НК

Николай Казаков in StartAndroid Ru Testing
не обязательно соблюдать последовательность?
источник

НК

Николай Казаков in StartAndroid Ru Testing
коряво как-то написал )))
источник

W

WaterSmith in StartAndroid Ru Testing
нет, не обязательно, с помощью when ты готовишь мок-объект к работе, конечно when должен выполнится раньше чем произойдет обращение к объекту в коде
источник

НК

Николай Казаков in StartAndroid Ru Testing
да, это поянтно
источник

W

WaterSmith in StartAndroid Ru Testing
а порядок самих when абсолютно не важен
источник

W

WaterSmith in StartAndroid Ru Testing
по сути что делает мокито. Она берет класс, и создает болванчика, у которого такие же публичные методы, только внутри них ничего нет. т.е. любой метод веренет null (или дефолтное значение для притивов) любой void метод просто будет вызван, но ничего не сделает. С помощью when ты добавляешь этому болванчику немного смысла. Прописываешь что возвращать в нужных тебе методах. Естественно не важно, в каком порядке ты эти методы опишешь.
источник
2018 August 08

НК

Николай Казаков in StartAndroid Ru Testing
подскажите, как замокировать БД? или возможно есть другой способ проверить доступность БД? на сколько я понял public static методы нельзя использовать в when, а в методе как раз используется SQLiteDatabase.openDatabase(dbPath, null, SQLiteDatabase.OPEN_READONLY);
источник

НК

Николай Казаков in StartAndroid Ru Testing
пробовал в качестве эксперимента добавить фиктивный метод (вывод в лог, вывод тоста) и затем проверить verify вызов этого метода, но и у Log и у Toast методы тоже public static
источник

W

WaterSmith in StartAndroid Ru Testing
Николай Казаков
пробовал в качестве эксперимента добавить фиктивный метод (вывод в лог, вывод тоста) и затем проверить verify вызов этого метода, но и у Log и у Toast методы тоже public static
Вот, вчера же об этом тебе писал.
источник

НК

Николай Казаков in StartAndroid Ru Testing
ну неужели чтоб протестирвоать метод надо его код переколбасить (все тосты вывести в отдельный класс) и кучу новых классов создать?
источник

W

WaterSmith in StartAndroid Ru Testing
Чтобы протестировать что угодно, нужно писать тестируемый код.
источник

N

Nikolay in StartAndroid Ru Testing
WaterSmith
Чтобы протестировать что угодно, нужно писать тестируемый код.
100%
источник