Котлин: модульный тест getView метод ArrayAdapter - PullRequest
0 голосов
/ 26 октября 2019

У меня есть следующие простые ArrayAdapter, на которых я хотел бы запустить UnitTests:

class AccountSpinnerAdapter(context: Context, textViewResourceId: Int, private val values: Set<Account>) : ArrayAdapter<Account>(context, textViewResourceId, values.toList()) {

    override fun getCount() = values.size
    override fun getItem(position: Int) = values.elementAt(position)
    override fun getItemId(position: Int) = position.toLong()

    override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
        val label = super.getView(position, convertView, parent) as TextView
        label.text = values.elementAt(position).displayName
        return label
    }

    override fun getDropDownView(position: Int, convertView: View?, parent: ViewGroup): View {
        val label = super.getDropDownView(position, convertView, parent) as TextView
        label.text = values.elementAt(position).displayName
        return label
    }
}

getCount, getItem и getItemId легко сделать.

Но как я могу проверить методы getView и getDropDownView? Проблемы, с которыми я сталкиваюсь:

  • 3-й параметр viewGroup не может быть null,Как подделать / смоделировать это ViewGroup?
  • , оба метода вызывают super.xxx. Как я могу настроить конструкцию when/then, чтобы она возвращала TextView?

Ответы [ 2 ]

0 голосов
/ 26 октября 2019

Для модульных тестов весь вид должен быть смоделирован с view = mock() на @Before тесте.

// https://mvnrepository.com/artifact/com.nhaarman/mockito-kotlin
testImplementation 'com.nhaarman:mockito-kotlin:1.6.0'

см .: Android-тестирование с помощью Mockito .

0 голосов
/ 26 октября 2019

Просто вы не можете протестировать какую-либо зависимость Android от JVM, потому что у вас нет контекста, чтобы иметь возможность получить представления или что-либо связанное с ним, для тестирования getView() и getDropDownView() у вас есть 2 варианта

  1. Тестирование инструментария записи с использованием эспрессо или его эквивалента (https://developer.android.com/training/testing/unit-testing/instrumented-unit-tests)
  2. Напишите свои тесты для запуска на JVM с использованием теней Android с помощью Robolectric, http://robolectric.org
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...