如何解决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 举报,一经查实,本站将立刻删除。