【问题标题】:easy android unit test fail简单的android单元测试失败
【发布时间】:2011-06-07 08:43:20
【问题描述】:

我有一个简单的活动,只有一个在 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
}

}

【问题讨论】:

  • 你打算测试什么?
  • 嗨 dtmilano,我想练习 tdd 并通过所有测试。
  • 我知道,但是您的 Activity 没有做任何特别的事情,因此我对您打算测试的内容提出疑问。

标签: android unit-testing junit


【解决方案1】:

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

我对 Android 的测试框架不是很熟悉,但您的 testStateDestroy() 测试可能会发生类似的问题。您的 mUrlView 可能仍指向旧的、已完成的 Activity。旧的活动不再有效,但它的小部件可能是。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-11
    • 2020-10-29
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多