class SomeVieModel(dependency: Dependency) {
doSomething(): Int {
return dependency.something()
}
}
测试视图模型返回的值是否与依赖项相同
val controlledDepedency = //some way to have a controlled depencey
//make the controlledDepedency always returns 1
val obtained = viewModel.doSomething()
assertEquals(1, obtained)
1条答案
按热度按时间um6iljoc1#
不建议使用依赖项注入进行单元测试,因为这与单元测试的目的相悖。
单元测试的想法是隔离调用者所消耗的将返回或导致预期结果的条件。这意味着应该控制视图模型的依赖关系,以Assert在某些条件下,预期会发生某些事情。类似于这样:
测试视图模型返回的值是否与依赖项相同
最常见的方法是使用模拟。对于Android,最常见的库是Mockito和Mockk。这两个库都允许您使用存根并配置行为。
但是还有其他的mocking技术,例如:伪装或假人
如果这样做,你有Android原生API的问题,一个常见的解决方案是使用Roboelectric。例如,如果你的视图模型得到一个颜色
ContextCompat.getColor
,将返回null在单元测试,使您的测试失败。Roboelectric,照顾这一点。针对该问题另一种解决方案是抽象:
因此,您可以将
AndroidAbstraction
实现传递给DI:在视图模型中使用它
然后将其作为受控依赖项(例如mock)传递给单元测试。