简单的android单元测试失败

时间:2011-06-07 08:43:21

标签: android unit-testing junit

我有一个简单的活动,只有一个edittext在xml中设置为“http://”。基于google tutorial,我为状态检查编写了一些单元测试。我想练习单元测试并通过所有测试。但我无法通过testStateDestroy()testStatePause()(日志显示mUrlView=="changed")。下面的代码非常简单,我错过了什么吗?提前谢谢。

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
}

}

1 个答案:

答案 0 :(得分:0)

好吧,对于你的testStatePause()测试,我认为这可能是有效的。即使活动暂停,您仍然可以随意修改它,因为您仍然可以引用它(或至少它的一个textViews。在这样的测试中,您应该在实际中更改textView的值activity的onPause方法,然后使用testStatePause测试来验证是否已调用onPause并正确执行其工作,然后对onResume()执行相同操作。

我对Android的测试框架并不熟悉,但是你的testStateDestroy()测试可能会遇到类似的问题。你的mUrlView仍然可以指向旧的,已完成的Activity。旧活动不再有效,但其小部件可能是。