模拟``lateinit var''

时间:2019-02-18 20:55:54

标签: android junit kotlin mocking android-espresso

对,所以我有一个MainActivity,它的ID为fragment_container

我现在想编写一个测试来检查该视图是否正在显示。

@RunWith(AndroidJUnit4::class)
class Foo{

    @get:Rule
    val mainActivity = ActivityTestRule(MainActivity::class.java)

    @Test fun startsWithFragmentContainerVisible(){
        onView(withId(R.id.fragment_container))
                .check(matches(isDisplayed()))
    }
}

确定。如果用户已经登录,则可以正常工作。

因为他不在,活动将触发

private fun startLoginCycle(){
    startActivity(Intent(this,LoginActivity::class.java))
}

这意味着fragment_container隐藏在LoginActivity后面。

这是我的MainActivity.onCreate

private lateinit var um: IUserManager

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    um = UserManager(this) //user manager needs a context to get access to shared preferences

    /* [...] */

    val au = um.activeUser
    if(!au.isLoggedIn) startLoginCycle()
}

由于此测试不需要UserManager的任何功能,因此我想模拟userManager并使其activeUser只是返回{{1 }}刚好登录。

我可以这样做吗?还是我需要编写一种方法来检查登录活动是否可见,如果可以,请使用一些测试帐户登录该应用程序?

0 个答案:

没有答案