我最近开始使用Android Studio 3.1.2和SDK 19编码我的第一个android项目。
当前,我正在为我的无UI对象编写测试,并希望进行测试,该测试将片段加载到oncreate()
方法中。活动本身会检查调用自身的Intent,并根据Intent中的标志加载不同的Fragment。活动布局仅包含一个名为fragment_container
的FrameLayout。
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()
吗?
答案 0 :(得分:1)
您应该使用FragmentManager
的{{1}}方法,然后可以使用findFragmentById()
检查它是哪个片段。
您的代码应如下所示:
instanceof