我有一个简单的活动,只有一个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
}
}
答案 0 :(得分:0)
好吧,对于你的testStatePause()测试,我认为这可能是有效的。即使活动暂停,您仍然可以随意修改它,因为您仍然可以引用它(或至少它的一个textViews。在这样的测试中,您应该在实际中更改textView的值activity的onPause方法,然后使用testStatePause测试来验证是否已调用onPause并正确执行其工作,然后对onResume()执行相同操作。
我对Android的测试框架并不熟悉,但是你的testStateDestroy()测试可能会遇到类似的问题。你的mUrlView仍然可以指向旧的,已完成的Activity。旧活动不再有效,但其小部件可能是。