android-Junit功能测试

本文介绍了如何在Android应用中进行功能测试,特别是涉及到在A类的EditText输入数据,点击按钮后在B类中显示输入内容的过程。测试时需要注意保持屏幕开启并使用英文输入法。测试类基于ActivityInstrumentationTestCase2,允许与Android系统交互,模拟用户操作。作者表示将持续深入研究测试领域,并分享相关知识。
摘要由CSDN通过智能技术生成

这篇文章将会记录下,给A类的EditText输入数据,然后通过点击按钮跳转到B类中,并在B类中显示A类EditText输入的数据。
注意:这个测试如果你是用的真机测试,请把屏幕打开,然后把输入法调成英文。否则会死的很惨。
下面先上被测试的代码:

public class SenderActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sender);
        final Button sendMessageButton = (Button) findViewById(R.id.send_message_button);
        final EditText messageInputEditText = (EditText) findViewById(R.id.message_input_edit_text);

        sendMessageButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (messageInputEditText != null) {
                    final CharSequence message = messageInputEditText.getText();
                    startActivity(ReceiverActivity.makeIntent(SenderActivity.this, message));
                }
            }
        });
    }
}

public class ReceiverActivity extends Activity {
    /**
     * The extra key that is used to identify the message in the Intents data bundle
     */
    private static final String EXTRA_SENDER_MESSAGE_TEXT
            = "com.example.android.testingfun.lesson5.extra.sender.message.text";

    /**
     * Factory method to create an launch intent for this activity.
     */
    public static Intent makeIntent(Context context, CharSequence message) {
        return new Intent(context, ReceiverActivity.class)
                .putExtra(EXTRA_SENDER_MESSAGE_TEXT, message);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_receiver);
        final CharSequence senderMessage = getIntent().getCharSequenceExtra(EXTRA_SENDER_MESSAGE_TEXT);
        final TextView receiverTextView = (TextView) findViewById(R.id.received_message_text_view);
        if (!TextUtils.isEmpty(senderMessage)) {
            receiverTextView.setText(senderMessage);
        }
    }
}

我们的测试类继承ActivityInstrumentationTestCase2。与ActivityUnitTestCase不同,ActivityInstrumentationTestCase2中的测试可以与Android系统通信,发送键盘输入及点击事件到UI中。

public class SenderActivityTest extends ActivityInstrumentationTestCase2<SenderActivity> {

    private SenderActivity mSenderActivity;
    private final long TIMEOUT_IN_MS = 5;
    private Intent mLaunchIntent;
    Button sendToReceiverButton;
    EditText senderMessageEditText;

    public SenderActivityTest() {
        super(SenderActivity.class);
    }

    @Override
    protected void setUp() throws Exception {
        super.setUp();
        mSenderActivity = getActivity();
        sendToReceiverButton =(Button)mSenderActivity.findViewById(R.id.send_message_button);
        senderMessageEditText = (EditText)mSenderActivity.findViewById(R.id.message_input_edit_text);
    }

    //验证初始化是否正确
    public void testPreconditions()
    {
        assertNotNull(mSenderActivity);
        assertNotNull(sendToReceiverButton);
        assertNotNull(senderMessageEditText);
    }

    public void testSendMessageToReceiverActivity(){
        //创建ActivityMonitor去监听系统和ReceiverActivity的通信
        Instrumentation.ActivityMonitor receiverActivityMonitor = getInstrumentation().addMonitor(ReceiverActivity.class.getName(),null,false);
        getInstrumentation().runOnMainSync(
                new Runnable() {
                    @Override
                    public void run() {
                        senderMessageEditText.requestFocus();
               }
           }
        );
        //等待直到MainHandler中的事件都被执行完
        getInstrumentation().waitForIdleSync();
        //发送字符串到EditText中
        getInstrumentation().sendStringSync("Hello Android!");
        getInstrumentation().waitForIdleSync();
        // 点击事件
        TouchUtils.clickView(this,sendToReceiverButton);
        // 获取跳转到的activity,并设置超时时间
        ReceiverActivity receiverActivity = (ReceiverActivity) receiverActivityMonitor.waitForActivityWithTimeout(TIMEOUT_IN_MS);
        assertNotNull("ReceiverActivity is null", receiverActivity);
        // activity每启动成功一次则会回调一次getHits()方法
        assertEquals("Monitor for ReceiverActivity has not been called",1,receiverActivityMonitor.getHits());
        assertEquals("Activity is of wrong type",ReceiverActivity.class, receiverActivity.getClass());
        final TextView receivedMessage = (TextView) receiverActivity.findViewById(R.id.received_message_text_view);
        assertNotNull(receivedMessage);
        assertEquals("Wrong received message","Hello Android!",receivedMessage.getText().toString());
        // 移除监视器,避免影响下次数据
        getInstrumentation().removeMonitor(receiverActivityMonitor);
    }
}

好了,到这里就结束了。这是现在找到的一些跟测试有关的资料,把他们整理,记录了下来。 测试之路才刚刚开始,以后有时间会多去研究下这方面的知识,以后学到新东西还会把他们记录下来,也希望能帮到更多人。如果哪位朋友有和测试相关的资料可以分享的话,我将感激不尽。

Reference:
http://hukai.me/android-training-course-in-chinese/testing/activity-testing/activity-function-testing.html
http://blog.csdn.net/wangfei199101/article/details/24136549

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值