如何在Android中模拟Kotlin对象?

我在kotlin中有一个对象,用于控制当前用户的会话信息.我想模拟具有回调的登录方法.

在测试时,我需要在SessionController对象中模拟此方法.

object SessionController {

...

    fun signIn(username: String, password: String, signInCallBack: SignInCallBack) {
        sessionApi.attemptSignIn(username,password,object: SignInCallBack{
            override fun onSignInComplete() {
                signInCallBack.onSignInComplete()
            }

            override fun one rrorOccurred(errorCode: Int, errorMessage: String) {
                signInCallBack.onErrorOccurred(errorCode)
            }

        })
    }
    ....
}

AndroidTest是这样的:

@RunWith(AndroidJUnit4::class)
class LoginActivityTest {
  @Test
    fun loginErrorShowing() {
        test.tapUsernameField()
        test.inputTextinUsernameField("wrongusername")
        test.pressUsernameFieldIMEAction()
        test.inputTextinPasswordField("randomPassword")
        test.presspasswordFieldIMEAction()

        Espresso.onView(ViewMatchers.withId(R.id.errorText)).check(ViewAssertions.matches(withText("Wrong Password")))
    }
}

关于如何实现此目标的任何建议/想法?我已经在线阅读了有关将Mockk用于kotlin的信息,但无法模拟该方法调用适当的回调.任何关于改进结构的建议也将不胜感激.

谢谢

解决方法:

好吧,我认为您应该让SessionController实现一个接口.

object SessionController: ISessionController {
    override fun signIn(username: String, password: String, signInCallBack: SignInCallBack) {
       (...)        
    }
}

interface ISessionController {
    fun fun signIn(username: String, password: String, signInCallBack: SignInCallBack)
}

这将为您提供很多解决问题的可能性,例如:

>依赖注入
>测试产品风味
>测试代码中的简单嘲笑()创建

给您一个非常严格的答案有点困难,因为您没有发布任何UT代码;)

编辑

很难在一个帖子中涵盖嘲笑这样的大话题;)
这里有一些很棒的文章

>依赖注入:https://medium.com/@elye.project/fast-mocked-ui-tests-on-android-kotlin-89ed0a8a351a
>使用不同的风味进行测试:https://android-developers.googleblog.com/2015/12/leveraging-product-flavors-in-android.html

创建单元测试,您始终可以做得简单:

presenter.sth = mockk<ISessionController>()

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...