Я следовал руководству о том, как правильно использовать модели представлений в kotlin, и хочу убедиться, что я все тестирую модулем.
Вот фабрика моделей представлений, которая требуетв создателе
class BaseViewModelFactory<T>(val creator: () -> T) : ViewModelProvider.Factory {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
return creator() as T
}
}
Вот функция расширения, которую я использую для вызова фабрики и передачи ей модели представления.
inline fun <reified T : ViewModel> FragmentActivity.getViewModel(noinline creator: (() -> T)? = null): T {
return if (creator == null)
ViewModelProviders.of(this).get(T::class.java)
else
ViewModelProviders.of(this, BaseViewModelFactory(creator)).get(T::class.java)
}
Затем в упражнении я использую следующееЧтобы лениво загрузить модель вида, используя функции расширения.
val model: MainViewModel by lazy {
getViewModel { MainViewModel() }
}
Все отлично работает.Но я изо всех сил пытаюсь выяснить, как выполнить модульное тестирование BaseViewModelFactory и функций расширения.
Вот моя попытка:
@RunWith(JUnit4::class)
class BaseViewModelFactoryTest {
// test string
private val testString = "testString"
@Rule @JvmField
public val activityTestRule = ActivityTestRule(MainActivity::class.java)
// a custom inner test view model for testing base view model
inner class TestViewModel: BaseViewModel() {
var test: String = ""
init {
test = testString
}
}
// lazy loads the model the same way activities do
val model: TestViewModel by lazy {
activityTestRule.activity.getViewModel { TestViewModel() }
}
@Before
fun setUp() {
}
@Test
fun view_model_loaded() {
assertEquals("The string in the model should be set",testString, model.test)
}
}
Это дает мне ошибку, хотя
java.lang.IllegalStateException: No instrumentation registered! Must run under a registering instrumentation.
Насколько я понимаю, ActivityTestRule работает только в AndroidTests, так как для работы требуется инструмент.
Моя проблема заключается в том, что я не уверен, как лучше правильно выполнить модульное тестирование функций расширения или фабрики модели представления.
Может кто-нибудь помочь мне правильно написать тесты для этих двух вещей.