【发布时间】:2019-09-09 19:44:12
【问题描述】:
我正在尝试用mockito 测试我的ViewModel。
这是我的测试类:
@RunWith(JUnit4::class)
class RatesViewModelTest {
@Rule @JvmField
open val instantExecutorRule = InstantTaskExecutorRule()
@Mock
var observer: Observer<Pair<ArrayList<CurrencyExchangerModel>,Boolean>>? = null
@Mock
private lateinit var repository: RatesRepository
private var currencyList = ArrayList<CurrencyModel>()
private lateinit var viewModel : RatesViewModel
@Before
fun setUp(){
MockitoAnnotations.initMocks(this)
currencyList.add(CurrencyModel("BASE"))
viewModel = RatesViewModel(repository!!)
viewModel.getCurrencyExchangerObservableList().observeForever(observer!!)
}
@Test
fun testNull(){
Mockito.`when`(repository.getFlowableRates()).thenReturn( Flowable.just(currencyList) )
assertTrue(viewModel.getCurrencyExchangerObservableList().hasObservers())
}
}
当这个方法被调用时:
Mockito.`when`(repository.getFlowableRates()).thenReturn( Flowable.just(currencyList) )
我收到了这个错误:
kotlin.UninitializedPropertyAccessException:lateinit 属性 db 有 未初始化
这里是存储库:
open class RatesRepository(context:Context) : BaseRepository(context){
@Inject
lateinit var ratesAPI: RatesAPI
@Inject
lateinit var db: Database
/**
* load the updated chatList from API
*/
fun loadCurrencyRatesFromAPI(): Single<ArrayList<CurrencyModel>> {
val supportedCurrency = context.resources.getStringArray(R.array.currencies)
return ratesAPI.getLatestRates(EUR_CURRENCY_ID).map { RatesConverter.getRatesListFromDTO(it,supportedCurrency) }
}
/**
* save rates on DB
*/
fun saveCurrencyRatesOnDB(list:ArrayList<CurrencyModel>): Completable {
return db.currencyRatesDAO().insertAll(list)
}
/**
* get flawable rates from DB
*/
fun getFlowableRates(): Flowable<List<CurrencyModel>> {
return db.currencyRatesDAO().getAll()
}
companion object {
const val EUR_CURRENCY_ID = "EUR" //BASE
}
}
我做错了什么?
谢谢!
【问题讨论】:
标签: android testing kotlin mockito viewmodel