首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以模拟/测试Android ViewBinding交互吗?

可以模拟/测试Android ViewBinding交互吗?
EN

Stack Overflow用户
提问于 2020-04-01 15:52:33
回答 1查看 1.9K关注 0票数 5

目前正在尝试在单元测试中测试与ViewBinding类的交互

代码语言:javascript
复制
"Invalid Input" should {
    "disable the LoginButton" {
        val viewBinding: FrLoginBinding = mockk()

        InvalidInputViewStateBinder.bind(InvalidInput, viewBinding)

        verify { viewBinding.loginButton.isEnabled = false }
    }
}

像这样的东西就是我的想法。ViewBinding中的视图是公共的最终属性,不容易被模仿。至少我不能。传递View模拟来创建ViewBinding也不起作用,因为我必须为此模拟findViewById

有没有人试过这个方法并让它起作用?

EN

回答 1

Stack Overflow用户

发布于 2020-06-24 03:15:49

我也遇到了同样的问题。下面是我解决这个问题的方法

代码语言:javascript
复制
@RunWith(PowerMockRunner::class)
@PrepareForTest(MyLayoutBinding::class)
class MyTestClass {

    @Mock
    lateinit var mMockViewBinding: MyLayoutBinding

    @Mock
    lateinit var mMockView: View

    @Mock
    lateinit var mMockTitleTv: TextView

    @Mock
    lateinit var mMockRootView: ConstraintLayout

    @Before
    fun setup() {
        MockitoAnnotations.initMocks(this)
        PowerMockito.mockStatic(MyLayoutBinding::class.java)
        whenever(MyLayoutBinding.bind(mMockView)).thenReturn(mMockViewBinding)
        
        // Use Whitebox for each view component in the layout.
        Whitebox.setInternalState(mMockBinding, "title", mMockTitleTv)
        
        // Because 'getRoot' is part of the ViewBinding interface, we just mock the method.
        whenever(mMockBinding.root).thenReturn(mMockRootView)
    }


}

使用Whitebox设置属性(即按id设置视图),并模拟getRoot()接口方法以设置模拟根视图的根。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60965983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档