ActivityScenarioRule: как узнать viewModelStoreOwner для эспрессо-тестов - PullRequest
0 голосов
/ 26 марта 2020

Я пишу тесты для базы данных в приложении Android, в Kotlin. Моя база данных реализована с использованием информации LiveData, поэтому у меня есть ViewModel, которая принимает android.app.Application в качестве аргумента:

class PostViewModel(application: Application) : AndroidViewModel(application) {

    private val repository: PostRepository = PostRepository(application)
    val allPosts: LiveData<List<PostEntity>>?

    init {
        // Constructs the PostRepository
        allPosts = repository.allPosts
    }

    // Some functions
}

Так что мне нужно в моем эспрессо-тесте PostViewModel, и создать его viewModelStoreOwner:

private lateinit var postViewModel: PostViewModel

    @Rule @JvmField
    var activityTestRule = ActivityTestRule(MainActivity::class.java)

    @Before
    fun setup() {
        val preferences = InstrumentationRegistry.getInstrumentation()
            .targetContext.getSharedPreferences("com.h.pixeldroid.pref", Context.MODE_PRIVATE)
        preferences.edit().putString("accessToken", "qwertz").apply()
        preferences.edit().putString("domain", "http://localhost").apply()
        ActivityScenario.launch(MainActivity::class.java)

        AppDatabase.TEST_MODE = true
        postViewModel =  ViewModelProvider(activityTestRule.activity).get(PostViewModel::class.java)
    }

    // Some tests
}

Кажется, до сих пор это работает хорошо. Однако ! Для этого теста я предпочел бы использовать ActivityScenarioRule по причинам (а в do c говорится: «Это правило является обновленной версией ActivityTestRule. Предыдущая версия устарела и в конечном итоге будет удалена из библиотека в будущем. "Так или иначе, в какой-то момент мне придется использовать его).

Моя проблема в том, что я не могу найти способ получить ViewModelOwner из ActivityScenarioRule, чтобы поместить его в качестве аргумента для ViewModelProvider(), например, путем получения текущей активности (здесь MainActivity::class.java) или что угодно. Я нахожу только геттер для сценария, который не дает никакой необходимой мне информации ...

Есть ли способ заставить ее работать?

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