嘲笑``lateinit var``s

Use*_*291 5 junit android mocking kotlin 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()))
    }
}
Run Code Online (Sandbox Code Playgroud)

好的...如果用户已经登录,那么就可以了。

因为如果他不这样做,该活动就会触发

private fun startLoginCycle(){
    startActivity(Intent(this,LoginActivity::class.java))
}
Run Code Online (Sandbox Code Playgroud)

这意味着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()
}
Run Code Online (Sandbox Code Playgroud)

由于此测试不需要任何 的UserManager功能,因此我想模拟userManager并让它简单地返回刚刚登录的activeUsera 的模拟。User

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