我在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中模拟Kotlin对象?全部内容,希望文章能够帮你解决如何在Android中模拟Kotlin对象?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)