насмешливый `` lateinit var``s - PullRequest
       13

насмешливый `` lateinit var``s

0 голосов
/ 18 февраля 2019

Правильно, поэтому у меня есть MainActivity, у которого есть представление с идентификатором 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 просто возвращает макет User, который только что вошел в систему.

Могу ли я это сделать?Или мне нужно написать метод, который проверяет, видна ли активность входа в систему и, если да, использовать тестовую учетную запись для входа в приложение?

...