这篇文章将会记录下,给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