Я недавно начал кодировать свой первый проект Android с использованием Android Studio 3.1.2 и SDK 19.
В настоящее время я пишу тесты для моих объектов без пользовательского интерфейса и хочу проверить, какой фрагмент загружает активностьв методе oncreate()
.Само действие проверяет инициируемый объект, и в зависимости от флага внутри намерения загружается другой фрагмент.Макет Activity содержит только FrameLayout с именем fragment_container
.
SplashActivity:
public class SplashActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
if (!(getIntent().getBooleanExtra("isLaunch", true))) {
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new LoginFragment()).commit();
} else {
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new SplashFragment()).commit();
}
}
}
}
Это фактически весь код SplashActivity
на данный момент.Теперь мой вопрос: есть ли способ проверить, какой фрагмент загружен?Возможно getSupportFragmentManager().getFragmentByTag()
?Спасибо вперед.
РЕДАКТИРОВАТЬ:
В соответствии с предложенным решением @rxabin я добавил проверку instanceof
в мои методы испытаний.
SplashActivityTest:
@RunWith(AndroidJUnit4.class)
public class SplashActivityTest {
private final SplashActivity testActivity = new SplashActivity();
private final Intent testIntent = new Intent();
@Test
public void canLoadSplashFragment() {
testActivity.recreate();
Fragment fragment = testActivity.getSupportFragmentManager().findFragmentById(R.id.fragment_container);
assertTrue(fragment instanceof SplashFragment);
}
@Test
public void canLoadLoginFragment() {
testIntent.putExtra("isLaunch", false);
testActivity.recreate();
Fragment fragment = testActivity.getSupportFragmentManager().findFragmentById(R.id.fragment_container);
assertTrue(fragment instanceof LoginFragment);
}
}
Когда я пытаюсь запустить этот тест, я получаю RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
, ссылаясь на строку, где я определяю testActivity
.Любая идея, как мне создать экземпляр действия, чтобы я мог назвать testActivity.recreate()
на нем?