Я хотел бы спросить, каково общее правило для классов, внедряемых в насмешливое поле в упражнении?
Например, допустим, у меня есть модель представления, внедренная в мое действие. Давайте предположим, что это не виртуальная машина из библиотеки компонентов архитектуры, а наш пользовательский класс (который использует внедрение конструктора). При запуске теста Espresso я не хочу вводить реальный класс и его зависимости, но я бы предпочел предоставить виртуальную виртуальную машину.
Ниже приведены некоторые фрагменты кода
MainActivity:
class MainActivity : AppCompatActivity() {
@Inject
internal lateinit var viewModel: MainActivityViewModel
override fun onCreate(savedInstanceState: Bundle?) {
DaggerMainActivityComponent.factory()
.create(this)
.inject(this)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}
MainActivityViewModel:
@Mockable
class MainActivityViewModel @Inject constructor(
private val repo: MainActivityRepo
) {
...
}
MainActivityTest:
class MainActivityTest {
@get:Rule
val activityRule = IntentsTestRule(
MainActivity::class.java,
false,
true
)
private val mainActivityViewModel = mock<MainActivityViewModel>()
@Before
fun setup() {
activityRule.activity.viewModel = mainActivityViewModel
}
fun someMocking() {
whenever(mainActivityViewModel...)
.thenReturn(...)
}
}
Было бы замечательно, если бы кто-то мог дать отзыв или, возможно, предложить лучшую реализацию. Спасибо.