2011-06-07 207 views
0

我有一個簡單的活動,只有一個在xml中設置爲「http://」的edittext。基於google tutorial,我編寫了一些狀態檢查的單元測試。我想練習單元測試並通過所有測試。但我不能通過testStateDestroy()testStatePause()(日誌顯示mUrlView=="changed")。下面的代碼非常簡單,我錯過了什麼嗎?先謝謝你。簡單的android單元測試失敗

public class MainActivity extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
} 




public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActivity> { 

private Activity mActivity; 
private EditText mUrlView; 

public MainActivityTest() { 
    super("au.com.crystalfish.safeshare.activity", MainActivity.class); 
} 

protected void setUp() throws Exception { 
    super.setUp(); 
    mActivity = this.getActivity(); 
    mUrlView = (EditText) mActivity.findViewById(au.com.crystalfish.safeshare.R.id.url); 
} 

public void testPreconditions() { 
    assertNotNull(mActivity); 
    assertEquals(mUrlView.getText().toString(), "http://"); 
} 

@UiThreadTest 
public void testRotate() { 
    mUrlView.setText("changed"); 
    mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
    mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
    assertEquals(mUrlView.getText().toString(), "changed"); 
} 

@UiThreadTest 
public void testStateDestroy() { 
    mUrlView.setText("changed"); 
    assertEquals(mUrlView.getText().toString(), "changed"); 
    mActivity.finish(); 
    mActivity = this.getActivity(); 
    assertEquals(mUrlView.getText().toString(), "http://"); <===========should be "http://" since it is a new activity 
} 

@UiThreadTest 
public void testStatePause() { 
    Instrumentation mInstr = this.getInstrumentation(); 
    mInstr.callActivityOnPause(mActivity); 
    mUrlView.setText("changed"); 
    mInstr.callActivityOnResume(mActivity); 
    assertEquals(mUrlView.getText().toString(), "http://");<======should be "http://" since the text should bot be changed when the activity was paused 
} 

}

+0

你打算測試什麼? – 2011-06-07 15:00:30

+0

Hi dtmilano,I want練習TDD並通過所有測試 – Chris 2011-06-07 23:55:43

+0

我知道,但你的活動沒有做任何特別的事情,因此我對你打算測試的問題有疑問。 – 2011-06-08 17:20:54

回答

0

嗯,你testStatePause()的測試,我認爲可能是有效的。即使活動暫停,您仍然可以自由修改它,但是您仍然可以自由修改它,因爲您仍然有一個對它的引用(或至少它的一個textViews)。在這樣的測試中,您應該更改textView的值活動的onPause方法,然後使用testStatePause測試來驗證onPause被調用並正確地完成了它的工作,然後對onResume()執行相同的操作。

我並不十分熟悉Android的測試框架,但也許有類似的問題在你的testStateDestroy()測試中發生,你的mUrlView仍然可能指向舊的,已完成的Activity,舊的活動已不再有效,但它的小部件可能是