ожидание завершения анимации и проверки результата в модульном тесте - PullRequest
0 голосов
/ 03 мая 2018

У меня есть модульный тест в kotlin, который выполняет longClick и затем проверяет, изменилась ли ширина представления или нет. Ширина должна измениться в течение полсекунды. Но независимо от того, как долго я его жду, полученная ширина не соответствует ожидаемой.

@Test
fun testLongClick() {
    var initialWidth = 0
    val listener = mock<TestInterface>(TestInterface::class.java)
    view?.let {


        it.findViewById<ImpulsesGroup>(R.id.test_default_impulse).getChildAt(2).setOnLongClickListener { child ->
            (child as ImpulsesButton).onLongClick(child, it.findViewById<ImpulsesGroup>(R.id.test_default_impulse), listener)
        }
        initialWidth = it.findViewById<ImpulsesGroup>(R.id.test_default_impulse).width
        assertThat("initial width", initialWidth, greaterThan(0))

        runOnUiThread {
            it.findViewById<ImpulsesGroup>(R.id.test_default_impulse).getChildAt(2).performLongClick()
        }

        await().atLeast(5, TimeUnit.SECONDS)
        assertThat(view!!.findViewById<ImpulsesGroup>(R.id.test_default_impulse).width, Matchers.equalTo(3 * initialWidth))
    }
}

Похоже, что окончательный assetThat () проверяется до завершения анимации!

1 Ответ

0 голосов
/ 03 мая 2018
private static class AsynchroniClass extends AsyncTask<Void, Void, Void> {


        protected Void doInBackground(Void... voids) {
          //what functions you need to do in the background
         //in your case get Current width of a view 
        }

        @Override
        protected void onPostExecute(Void result) {
            //now after you have the width call your function
        }
    }

Тогда не забудьте назвать AsynchroniClass в вашем onCreateView следующим образом:

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