Android FragmentScenario androidTest предотвращает выполнение сетевых вызовов при запуске и отображает тестирование модеAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Android FragmentScenario androidTest предотвращает выполнение сетевых вызовов при запуске и отображает тестирование моде

Сообщение Anonymous »

У меня есть существующий класс фрагмента как часть компонента навигационного графа, и я использую Dagger для создания экземпляров ViewModels, привязанных к навигационному графу. Однако у меня есть несколько вопросов о FragmentScenario и о том, как он работает.
Но сначала я хочу запустить базовую функцию настройки, чтобы установить FragmentScenario перед каждым тестом пользовательского интерфейса.

Код: Выделить всё

    private lateinit var scenario: FragmentScenario
private lateinit var mockNavController : NavController

//Annotation to be marked as @Before later
@Test
fun setUp() {
mockNavController = TestNavHostController(ApplicationProvider.getApplicationContext())
scenario = launchFragmentInContainer {
MyFragment().also { fragment ->
fragment.viewLifecycleOwnerLiveData.observeForever { viewLifecycleOwner ->
if (viewLifecycleOwner != null) {
// The fragment’s view has just been created

fragment.requireActivity().runOnUiThread {
mockNavController.setViewModelStore(ViewModelStore())
mockNavController.setGraph(R.navigation.base_nav_graph)
Navigation.setViewNavController(fragment.requireView(), mockNavController)
}
}
}
}
}
}
В классе MyFragment у меня есть ленивые значения моих моделей представления, которые содержат функции для выполнения вызовов сетевых запросов с помощью Retrofit. В реальной среде приложения намеренно выполняется сетевой запрос во фрагменте onViewCreated на основе условий в флагах внутри модели представления; условия задаются в модели представления внутри активности хоста.
Из того, что я вижу, среда FragmentScenario также выполняет те же вызовы, как если бы я запускал приложение. Помимо головной боли, вызванной ленивым созданием экземпляров LiveData внутри модели представления (подумайте: «setValue не может быть запущен в фоновом потоке») при запуске сетевых вызовов на IO, отправленном CoroutineScope, потому что мне нужны некоторые параметры запроса для вызова из этих ленивых значений LiveData , предназначено ли это поведение FragmentScenario для выполнения сетевых вызовов даже в инструментированной среде Test? Я бы предпочел предотвратить это без каких-либо условий, если это возможно.
Я обнаружил, что с помощью FragmentScenario я начинаю менять видимость моего кода с частного на общедоступный, просто чтобы получить доступ к некоторым переменных и функций. Ожидается ли это также при попытке провести инструментальные тесты?
В теме тестирования модели представления есть ли возможность издеваться над моими функциями модели представления или самим классом? Мое определение модели представления следующее:

Код: Выделить всё

class MyViewModel @AssistedInject constructor(
private val repository : MyRepository,
@Assisted val savedStateHandle: SavedStateHandle
) : ViewModel()

//and the factory
@AssistedFactory
interface MyViewModelFactory {
fun create(savedStateHandle: SavedStateHandle) : MyViewModel
}

//lazy val
val myViewModel: MyViewModel by lazy {
ViewModelProvider(findNavController().getBackStackEntry(R.id.base_nav_graph), Factory(this) { stateHandle ->
appComponent.myViewModel()
.create(stateHandle)}).get(MyViewModel::class.java)
}
AppComponent — это подкомпонент в Dagger Graph, где фабрика модели представления внедряется во фрагмент.
Если я смогу имитировать ViewModel для условий и функций сетевого вызова, это может быть упростите тестирование, если я хочу изолировать тестовый запрос с помощью фиктивных данных.

Подробнее здесь: https://stackoverflow.com/questions/790 ... launch-and
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»