我有一个单元测试,在我销毁并完成应用程序之后,我再次调用getActivity()来验证它是否正确加载。但是,它没有调用onCreate()!
public void testHistory() {
...
mActivity.onPause();
mActivity.finish();
assertTrue(mActivity.getExtractor() == null);
assertTrue(mActivity.getSettings() == null);
Log.d(TAG, "************** Restarting app to verify load.");
mActivity = getActivity();
assertTrue(mActivity != null);
assertTrue(mActivity.getExtractor() != null); //////// THIS FAILS!!!
这是日志
10-07 21:11:40.467: D/SpeedyReader(15441): onPause()
10-07 21:11:40.514: D/SpeedyReader(15441): Saving 5 articles, 1 historical articles...
10-07 21:11:40.709: D/SpeedyReader(15441): Saved articles. success: true, length: 88218
10-07 21:11:40.764: D/SpeedyReader(15441): onStop()
10-07 21:11:40.764: D/SpeedyReader(15441): onDestroy()
10-07 21:11:40.772: D/SpeedyReader(15441): finish()
10-07 21:11:40.772: D/SpeedyReader(15441): ************** Restarting app to verify load.
10-07 21:11:40.772: D/SpeedyReader(15441): finish()
10-07 21:11:40.897: D/SpeedyReader(15441): onCreate()
10-07 21:11:40.944: D/SpeedyReader(15441): finalize()
10-07 21:11:40.944: D/SpeedyReader(15441): Settings.load() wpm:300
10-07 21:11:40.944: D/SpeedyReader(15441): Loading articles...
我不知道它为什么在日志文件中说onCreate。就像onCreate()被异步调用一样!这是我的onCreate()。
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.d(TAG, "onCreate()");
....
extract = new Extractor();
我试过waitForIdleSync()
Log.d(TAG, "************** Restarting app to verify load.");
mActivity = getActivity(); // restart the app, reload the history
getInstrumentation().waitForIdleSync(); // ------------ NEW
但这没有帮助。
答案 0 :(得分:1)
我认为就框架而言,这是预期的行为。
我假设您正在扩展ActivityInstrumentationTestCase2或ActivityUnitTestCase。 ActivityUnitTestCase表示finish()什么都不做。至于你的异步行为,你通常从InstrumentationThread运行测试,我相信生命周期的回调需要从主线程调用。这不是在您的示例代码中完成的。
对于未调用onCreate的实例,getActivity()将断言onCreate()被正确调用,但其余部分由你决定。在真实生命周期中,对同一测试调用中的活动调用finish()不会产生任何影响。它不会自动取消注册活动。仅在活动的finish()方法中运行代码。因为getActivity()可以被多次调用,并且只会在同一个实例上调用onCreate()一次。它永远不会再从同一测试用例中调用onCreate()。
答案 1 :(得分:0)
getInstrumentation().callActivityOnCreate(mActivity, null);