android-Junit单元测试

这篇文章记录下单元测试。流程是通过点击A这个Activity的Button按钮,通过Intent携带数据,然后跳转到B这个Activity。
注意:单元测试一般不适合测试与系统有复杂交互的UI。
先上被测试的Activity的代码:

public class LaunchActivity extends Activity {

    /**
     * The payload that is passed as Intent data to NextActivity.
     */
    public final static String STRING_PAYLOAD = "Started from LaunchActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_launch_next);

        Button launchNextButton = (Button) findViewById(R.id.launch_next_activity_button);

        launchNextButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(NextActivity.makeIntent(LaunchActivity.this, STRING_PAYLOAD));
                finish();
            }
        });
    }
}

public class NextActivity extends Activity {

    /**
     * Extras key for the payload.
     */
    public final static String EXTRAS_PAYLOAD_KEY
            = "com.example.android.testingfun.lesson4.EXTRAS_PAYLOAD_KEY";

    /**
     * Factory method to create a launch Intent for this activity.
     */
    public static Intent makeIntent(Context context, String payload) {
        return new Intent(context, NextActivity.class).putExtra(EXTRAS_PAYLOAD_KEY, payload);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_next);

        final String stringPayload = getIntent().getStringExtra(EXTRAS_PAYLOAD_KEY);

        if (stringPayload != null) {
            ((TextView) findViewById(R.id.next_activity_info_text_view)).setText(stringPayload);
        }

    }
}

ActiviUnitTestCase类提供对于单个Activity进行分离测试的支持。要创建单元测试,我们的测试类应该继承自ActiviUnitTestCase。继承ActiviUnitTestCase的Activity不会被Android自动启动。要单独启动Activity,我们需要显式的调用startActivity()方法,并传递一个Intent来启动我们的目标Activity。
下面是测试类的代码:

public class LaunchActivityTest extends ActivityUnitTestCase<LaunchActivity> {

    private Intent mLaunchIntent;
    private Button lauchNextButton;

    public LaunchActivityTest() {
        super(LaunchActivity.class);
    }

    @Override
    protected void setUp() throws Exception {
        super.setUp();
        //获取启动的Intent
        mLaunchIntent = new Intent(getInstrumentation().getTargetContext(),LaunchActivity.class); 
        //启动activity
        startActivity(mLaunchIntent, null, null); 
        //获取控件
        lauchNextButton = (Button) getActivity().findViewById(R.id.launch_next_activity_button); 
    }

    @MediumTest
    public void testNextActivityWasLaunched_WithIntent(){
        lauchNextButton.performClick(); //模拟点击事件
        Intent lauchIntent = getStartedActivityIntent(); //获取跳转后的Intent
        assertNotNull("Intent was null",lauchIntent); //判断Intent是否为null
        assertTrue(isFinishCalled()); //判断跳转后activity是否销毁
        //获取Intent携带的数据
        String payload = lauchIntent.getStringExtra(NextActivity.EXTRAS_PAYLOAD_KEY); 
        //判断Intent携带的数据是否正确
        assertEquals("Payload is empty", LaunchActivity.STRING_PAYLOAD, payload); 
    }
}

因为LaunchActivity是独立运行的,所以不可以使用TouchUtils库来操作UI。如果要直接进行Button点击,我们可以调用perfoemClick()方法。
好了大家可以自己写写看了,动手才能发现真正的问题。下篇记录下功能测试。

Reference:
http://hukai.me/android-training-course-in-chinese/testing/activity-testing/activity-unit-testing.html%20%20%E5%8F%82%E7%85%A7

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值