【发布时间】:2021-09-20 16:02:01
【问题描述】:
我想创建一个带有注解@AndroidEntryPoint 的Activity 的模拟对象。在那次模拟之后,它的方法就像
whenever(activity.getAnalytics()).thenReturn(mockOfAnalytics)
但它不适用于@AndroidEntryPoint 注释的活动,当我删除此注释时它可以工作 - build.tool 4.2.2
@RunWith(PowerMockRunner::class)
@PrepareForTest(Html::class)
class CallShopViewModelTest {
...
@Mock
private lateinit var storefrontAnalytics: StorefrontAnalytics
@Mock
private lateinit var storefrontDelegate: StorefrontActivity.StorefrontDelegate
...
@Test
fun setShopObject() {
val mock = Mockito.mock(ShopMenuActivity::class.java)
whenever(mock.storefrontAnalytics).thenReturn(storefrontAnalytics)
whenever(mock.storefrontDelegate).thenReturn(storefrontDelegate)
whenever(mock.getString(ArgumentMatchers.anyInt(),
ArgumentMatchers.anyString())).thenReturn("test")
objectUnderTest = CallShopViewModel(mock)
objectUnderTest.setShop(Shop().apply {
isAcquired = false
shopId = 100
twilioPhone = "123"
})
Assert.assertFalse(objectUnderTest.mAcquired.get())
Assert.assertTrue(objectUnderTest.twilioFormattedText.get() != "")
}
}
活动
@AndroidEntryPoint
class ShopMenuActivity : StorefrontActivity {
....
val storefrontAnalytics: StorefrontAnalytics
get() = app.storefrontAnalytics
val storefrontDelegates: StorefrontDelegates
get() = app.storefrontDelegates
}
那么我怎样才能模拟这个活动并使用它的方法呢? 谢谢!
【问题讨论】:
标签: android testing mockito dagger-hilt