ViewModel的单元测试始终为空结果,或者通过时不考虑匹配的参数

问题描述

我正在尝试对viewmodel进行单元测试,但始终会导致null或通过,而没有考虑此android-architecture-samples之后的匹配参数。任何帮助或指导都在此先感谢

viewmodel

class TodayExpenseFragmentviewmodel @viewmodelInject constructor(var localRepository: LocalRepository,var expenseMonitorSharedPreferences: ExpenseMonitorSharedPreferences) : viewmodel() {


    var getTodayExpenses: LiveData<List<Expenses>>? = localRepository.todayExpenses(expenseMonitorSharedPreferences.getCurrentDate().toString(),expenseMonitorSharedPreferences.getCurrency().toString())

    private val _navigatetoSelectedExpense = mutablelivedata<Expenses>()
    val navigatetoSelectedExpense: LiveData<Expenses>
        get() = _navigatetoSelectedExpense


    fun displaySelectedExpense(expense: Expenses) {
        _navigatetoSelectedExpense.value = expense
    }

    fun displaySelectedExpenseCompleted() {
        _navigatetoSelectedExpense.value = null
    }

}

单元测试

/**
 * Unit tests for the implementation of [TodayExpenseFragmentviewmodelTest]
 */
@ExperimentalCoroutinesApi
@RunWith(AndroidJUnit4::class)
@Config(sdk = [Config.OLDEST_SDK])
class TodayExpenseFragmentviewmodelTest{

    private lateinit var todayExpenseFragmentviewmodel: TodayExpenseFragmentviewmodel

    private var expenseMonitorDao : ExpenseMonitorDao = Mockito.mock(ExpenseMonitorDao::class.java)

    private lateinit var localRepository: LocalRepository

    private lateinit var expenseMonitorSharedPreferences: ExpenseMonitorSharedPreferences

    // Executes each task synchronously using Architecture Components.
    @get:Rule
    var instantExecutorRule = InstantTaskExecutorRule()

    // Set the main coroutines dispatcher for unit testing.
    @ExperimentalCoroutinesApi
    @get:Rule
    var mainCoroutineRule = MainCoroutineRule()

    var expenses  = Expenses(amount = 1000.toBigDecimal(),description = "for food",expenseCategory = "Food",currency = "SDG",date = LocalDateTime.Now().toString())

    @Before
    fun setviewmodel() {
        expenseMonitorSharedPreferences   = ExpenseMonitorSharedPreferences(ApplicationProvider.getApplicationContext())
        localRepository                   = LocalRepository(expenseMonitorDao,expenseMonitorSharedPreferences)
    }

    @Test
    fun getTodayExpenses_Empty() = mainCoroutineRule.runBlockingTest{
        todayExpenseFragmentviewmodel     = TodayExpenseFragmentviewmodel(localRepository,expenseMonitorSharedPreferences)

        localRepository.insertExpense(expenses)
        
                        assertthat(todayExpenseFragmentviewmodel.getTodayExpenses?.getorAwaitValue()?.get(0)?.amount).isEqualTo(1000)


    }


}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)