Espresso ActivityTestRule не работает с AppCompatActivity - PullRequest
0 голосов
/ 04 марта 2019

Я пытаюсь создать UI-тест для моего приложения для Android с помощью Espresso.Мои действия расширяются AppCompatActivity, и я использую ActivityTestRule для запуска действия, но оно дает следующее исключение:

Type parameter bound for T in constructor ActivityTestRule<T : Activity (activityClass: Class<T!>!)is not satisfied: inferred type HomeActivity! is not a subtype of Activity!

Вот мой тестовый класс:

@RunWith(AndroidJUnit4::class)
class ProductListRestrictionsUITest {

    @Rule @JvmField
    var activityRule = ActivityTestRule(HomeActivity::class.java)

    @Test
    fun buttonClick_goToSecondActivity() {
        onView(withId(R.id.floatingSearchView)).perform(click())
        onView(withId(R.id.floatingSearchView)).perform(typeText("olut"))
        onView(withId(R.id.floatingSearchView)).perform(pressKey(KeyEvent.KEYCODE_SEARCH))

//        onView(withId(R.id.layout)).check(matches(isDisplayed()))
    }
}

У меня естьтребуемые зависимости в файле gralde:

androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test:rules:1.0.2'

// espresso support
androidTestImplementation('com.android.support.test.espresso:espresso-core:3.0.1', {
    exclude group: 'com.android.support', module: 'support-annotations'
})

Я не смог найти ресурс, который говорит, какое другое правило использовать для AppCompatActivity.Что я здесь не так делаю?

Ответы [ 2 ]

0 голосов
/ 27 марта 2019

при прочтении сообщения об ошибке дважды, в частности в первой и второй строке:

Type parameter bound for T in constructor ActivityTestRule<T :
Activity (activityClass: Class<T!>!)is not satisfied:
inferred type HomeActivity! is not a subtype of Activity!

это указывает на явное указание, какой тип <T> должен быть выведен:

@Rule @JvmField 
val activityRule: ActivityTestRule<HomeActivity> = ActivityTestRule(HomeActivity::class.java)

в Java он требует того же избыточного синтаксиса и не разрешает универсальный тип <T>.

0 голосов
/ 27 марта 2019

Это может произойти в модуле com.android.test, когда версии appcompat были разными в основном приложении и в тестовом модуле.

Исправлено - явное объявление зависимости appcompat с номером версии в обоих app/build.gradle и testmodule/build.gradle, так что вы получаете одну и ту же версию в обоих.

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