2014-01-06 3 views
3

У меня возникли проблемы с получением основной линии пользовательского интерфейса внутри тестовой пробы robolectric (версия 1.1). Применение метода я тестирование имеет следующую проверку в нем:Получение доступа к потоку пользовательского интерфейса с использованием robolectric

if (Thread.currentThread() != Looper.getMainLooper().getThread()) { 
      throw new IllegalStateException(
        "This method should be called from the Main UI Thread"); 
     } 
    } 

Эта проверка не выполняется, когда вызывается следующим образом:

@Test 
public void maTest() { 

    Runnable task = new Runnable() { 

     @Override 
     public void run() { 

      adapter.testThreadPrecondition(); 

     } 
    }; 

    new Handler(Looper.getMainLooper()).post(task); 
} 

попытался также «runOnUiThread», и получил такую ​​же проверку на провал , Что происходит? разные основные петлители?

+0

также попытался с AsyncTask, но внутри ничего «onPostExecute», кажется, дозвонились (или вызывается, но не тихо) task.execute(); Robolectric.getBackgroundScheduler(). RunOneTask(); Robolectric.getUiThreadScheduler(). RunOneTask(); – chris

+0

когда-либо находил решение этого? – theV0ID

+0

печально нет, я удалил тесты вместо этого. – chris

ответ

0

Поместите код, который проверяет, является ли поток петлителя текущей нитью в методе, например ValidateRunningOnLooperThread().

Затем в модульном тестировании используйте насмешливый каркас, например Mockito, до mock that method, чтобы просто успешно вернуться.

Смежные вопросы