Как внедрить издевательский класс в упражнение? - PullRequest
0 голосов
/ 21 февраля 2020

Я хотел бы спросить, каково общее правило для классов, внедряемых в насмешливое поле в упражнении?

Например, допустим, у меня есть модель представления, внедренная в мое действие. Давайте предположим, что это не виртуальная машина из библиотеки компонентов архитектуры, а наш пользовательский класс (который использует внедрение конструктора). При запуске теста 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(...)
    }
}

Было бы замечательно, если бы кто-то мог дать отзыв или, возможно, предложить лучшую реализацию. Спасибо.

...