Фрагмент, не связанный с менеджером фрагментовAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Фрагмент, не связанный с менеджером фрагментов

Сообщение Anonymous »

Я пишу несколько инструментальных тестов для приложения с одним действием и несколькими фрагментами, используя компонент навигации.

Код для моего экрана-заставки следующий: ниже:

class SplashFragment : Fragment(), KodeinAware {

override val kodein by Admin.instance.kodein

private var realm: Realm? = null

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.splash, container, false)
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)

(activity as? AppCompatActivity)?.supportActionBar?.hide()

realm = Realm.getInstance(RealmUtil.realmConfig)

val result = realm!!.where().findFirst()
val user = if (result != null) realm!!.copyFromRealm(result) else null

Handler().postDelayed({
if (user == null)
findNavController().navigate(R.id.action_splashFragment_to_loginFragment) //navigate to login screen if no user exists
else
findNavController().navigate(R.id.action_splashFragment_to_businessListFragment) //navigate to business list if user already logged in
}, 2000)
}

override fun onDestroy() {
super.onDestroy()

realm?.close()
}
}


Я пытаюсь протестировать фрагмент, который идет после заставки, но постоянно получаю следующую ошибку:

java.lang.IllegalStateException: Fragment SplashFragment{a1ca381 (5f5b98ae-c130-4e9b-9b77-0495561ef4f5)} not associated with a fragment manager.
at androidx.fragment.app.Fragment.requireFragmentManager(Fragment.java:891)
at androidx.navigation.fragment.NavHostFragment.findNavController(NavHostFragment.java:106)
at androidx.navigation.fragment.FragmentKt.findNavController(Fragment.kt:29)
at com.chargebot.collect.admin.fragment.onboarding.SplashFragment$onViewCreated$1.run(SplashFragment.kt:44)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at androidx.test.espresso.base.Interrogator.loopAndInterrogate(Interrogator.java:148)
at androidx.test.espresso.base.UiControllerImpl.loopUntil(UiControllerImpl.java:519)
at androidx.test.espresso.base.UiControllerImpl.loopUntil(UiControllerImpl.java:478)
at androidx.test.espresso.base.UiControllerImpl.injectKeyEvent(UiControllerImpl.java:201)
at androidx.test.espresso.base.UiControllerImpl.injectString(UiControllerImpl.java:357)
at androidx.test.espresso.action.TypeTextAction.perform(TypeTextAction.java:108)
at androidx.test.espresso.ViewInteraction$SingleExecutionViewAction.perform(ViewInteraction.java:360)
at androidx.test.espresso.ViewInteraction.doPerform(ViewInteraction.java:251)
at androidx.test.espresso.ViewInteraction.access$100(ViewInteraction.java:64)
at androidx.test.espresso.ViewInteraction$1.call(ViewInteraction.java:157)
at androidx.test.espresso.ViewInteraction$1.call(ViewInteraction.java:154)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)


Мой тестовый класс выглядит следующим образом:

@RunWith(AndroidJUnit4::class)
@MediumTest
class SignInTest {

@get: Rule
val login = ActivityScenarioRule(Home::class.java)

@Test
fun loginWithoutEmail_ShouldDisplayError() {
val scenario = launchFragmentInContainer()

onView(withId(R.id.password)).perform(typeText("samplePassword"), closeSoftKeyboard())
onView(withId(R.id.login)).perform(click())

onView(withId(com.google.android.material.R.id.snackbar_text)).check(matches(withText(R.string.enter_email)))
}

@Test
fun loginWithoutPassword_ShouldDisplayError() {
val scenario = launchFragmentInContainer()

onView(withId(R.id.email)).perform(typeText("sample@password.com"), closeSoftKeyboard())
onView(withId(R.id.login)).perform(click())

onView(withId(com.google.android.material.R.id.snackbar_text)).check(matches(withText(R.string.enter_password)))
}
}


Ни одна из моих тестовых функций не будет выполнена из-за вышеупомянутой ошибки. В чем причина исключения, поскольку тесты, которые я запускаю на экране-заставке, в ы п о л н я ю т с я у с п е ш н о ? < / p > < b r / > < b r / > М о й n a v _ g r a p h < / к о д > в ы г л я д и т с л е д у ю щ и м о б р а з о м : < / p > < b r / > < b r / > < c o d e > & l t ; ? x m l v e r s i o n = " 1 . 0 " e n c o d i n g = " u t f - 8 " ? & g t ; < b r / > & l t ; n a v i g a t i o n x m l n s : a n d r o i d = " h t t p : / / s c h e m a s . a n d r o i d . c o m / a p k / r e s / a n d r o i d " < b r / > x m l n s : a p p = " h t t p : / / s c h e m a s . a n d r o i d . c o m / a p k / r e s - a u t o " < b r / > x m l n s : t o o l s = " h t t p : / / s c h e m a s . a n d r o i d . c o m / t o o l s " < b r / > a n d r o i d : i d = " @ + i d / n a v _ g r a p h " < b r / > a p p : s t a r t D e s t i n a t i o n = " @ i d / s p l a s h F r a g m e n t " & g t ; < b r / > < b r / > & l t ; f r a g m e n t < b r / > a n d r o i d : i d = " @ + i d / s p l a s h F r a g m e n t " < b r / > a n d r o i d : n a m e = " c o m . c h a r g e b o t . c o l l e c t . a d m i n . f r a g m e n t . o n b o a r d i n g . S p l a s h F r a g m e n t " < b r / > a n d r o i d : l a b e l = " S p l a s h F r a g m e n t " < b r / > t o o l s : l a y o u t = " @ l a y o u t / s p l a s h " & g t ; < b r / > & l t ; a c t i o n < b r / > a n d r o i d : i d = " @ + i d / a c t i o n _ s p l a s h F r a g m e n t _ t o _ l o g i n F r a g m e n t " < b r / > a p p : d e s t i n a t i o n = " @ i d / l o g i n F r a g m e n t " < b r / > a p p : p o p U p T o = " @ + i d / s p l a s h F r a g m e n t " < b r / > a p p : p o p U p T o I n c l u s i v e = " t r u e " / & g t ; < b r / > & l t ; a c t i o n < b r / > a n d r o i d : i d = " @ + i d / a c t i o n _ s p l a s h F r a g m e n t _ t o _ b u s i n e s s L i s t F r a g m e n t " < b r / > a p p : d e s t i n a t i o n = " @ i d / b u s i n e s s L i s t F r a g m e n t " < b r / > a p p : p o p U p T o = " @ + i d / s p l a s h F r a g m e n t " < b r / > a p p : p o p U p T o I n c l u s i v e = " t r u e " / & g t ; < b r / > & l t ; / f r a g m e n t & g t ; < b r / > & l t ; f r a g m e n t < b r / > a n d r o i d : i d = " @ + i d / r e g i s t r a t i o n F r a g m e n t " < b r / > a n d r o i d : n a m e = " c o m . c h a r g e b o t . c o l l e c t . a d m i n . f r a g m e n t . o n b o a r d i n g . R e g i s t r a t i o n F r a g m e n t " < b r / > a n d r o i d : l a b e l = " R e g i s t r a t i o n F r a g m e n t " < b r / > t o o l s : l a y o u t = " @ l a y o u t / r e g i s t r a t i o n " & g t ; < b r / > & l t ; a c t i o n < b r / > a n d r o i d : i d = " @ + i d / a c t i o n _ r e g i s t r a t i o n F r a g m e n t _ t o _ b u s i n e s s L i s t F r a g m e n t " < b r / > a p p : d e s t i n a t i o n = " @ i d / b u s i n e s s L i s t F r a g m e n t " < b r / > a p p : p o p U p T o = " @ + i d / r e g i s t r a t i o n F r a g m e n t " < b r / > a p p : p o p U p T o I n c l u s i v e = " t r u e " / & g t ; < b r / > & l t ; a c t i o n < b r / > a n d r o i d : i d = " @ + i d / a c t i o n _ r e g i s t r a t i o n F r a g m e n t _ t o _ l o g i n F r a g m e n t " < b r / > a p p : d e s t i n a t i o n = " @ i d / l o g i n F r a g m e n t " < b r / > a p p : p o p U p T o = " @ + i d / r e g i s t r a t i o n F r a g m e n t " < b r / > a p p : p o p U p T o I n c l u s i v e = " t r u e " / >
































Подробнее здесь: https://stackoverflow.com/questions/556 ... nt-manager
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»