Правильно, поэтому у меня есть 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
, который только что вошел в систему.
Могу ли я это сделать?Или мне нужно написать метод, который проверяет, видна ли активность входа в систему и, если да, использовать тестовую учетную запись для входа в приложение?