问题描述
我正在尝试对viewmodel
进行单元测试,但始终会导致null或通过,而没有考虑此android-architecture-samples之后的匹配参数。任何帮助或指导都在此先感谢
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 (将#修改为@)