android 测试框架是基于JUnit(www.junit.org)的,感兴趣的可以看看JUnit的源码,相信会对做unit test in android 大有帮助的。
本文只是一篇介绍JUnit如何用于android的入门文字,更多是照着网上的敲出来的,很意外的是三星的官网上居然有介绍JUnit的文章,
哈哈,所以拿过来用了。以前也没做过unit test,JUnit也是最近才接触,记录一下,边学边用吧!!
英文还OK的可以直接看原文(click me)吧!!
JUnit的基本思路:
a 创建自己的项目(已有项目直接跳过这步,从b开始)
b 创建android test project.
下面介绍步骤a,b.
a 创建自己的项目。创建普通android项目,其中main.xml代码
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<Button
android:id="@+id/Pounds"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="Convert to Pounds" />
<EditText
android:id="@+id/inputvalueK"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/Pounds"
android:hint="No. of Kilos" />
<Button
android:id="@+id/Kilos"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_below="@id/Pounds"
android:text="Convert to Kilos" />
<EditText
android:id="@+id/inputvalueP"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/Pounds"
android:layout_toLeftOf="@id/Kilos"
android:hint="No. of Pounds" />
<TextView
android:id="@+id/resultview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/Kilos"
android:text="Result " />
</RelativeLayout>
该项目的相关activity ,其中Sample的代码
package com.example.samplejunit;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class Sample extends Activity implements OnClickListener {
Button mckilos,mcpounds;
EditText mkilos,mpounds;
TextView mresult;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mresult = (TextView)findViewById(R.id.resultview);
mkilos = (EditText)findViewById(R.id.inputvalueK);
mpounds = (EditText)findViewById(R.id.inputvalueP);
mckilos = (Button)findViewById(R.id.Kilos);
mcpounds = (Button)findViewById(R.id.Pounds);
mckilos.setOnClickListener(this);
mcpounds.setOnClickListener(this);
}
@Override
public void onClick(View v)
{
switch(v.getId())
{
case R.id.Kilos:
{
double pounds = Double.parseDouble(mpounds.getText().toString());
double kilos = pounds*0.4535;
mresult.setText(new Double(kilos).toString());
}
break;
case R.id.Pounds:
{
double kilos = Double.parseDouble(mkilos.getText().toString());
double pounds = kilos*2.2046;
mresult.setText(new Double(pounds).toString());
}
break;
}
}
}
运行Sample时的截图
b 创建android test project.
大致简单的介绍下在Eclipse中创建android test project。
File → New → Other → Android test Project → Next → New Android Test Project,填写Project Name,随意
→ Select Test Target,选择被测试的项目,比如我的是Sample,→ Next 一路下去 → 创建成功。
之后创建一个Testcase 类 SampleUnit ,继承自ActivityInstrumentationTestCase2<Sample> .
接下来要重写父类的方法 setUp() tearDown() ,以及其他的一些方法
setUp() 在用例运行之前需要先初始化环境. 该方法总是先被调用。
tearDown() 用于回收资源与垃圾清理
testViews (): 确保 SampleJUnit application 能正确的开始执行。
testKilos2Pounds() 测试kilo 转pound是否正确
testPounds2Kilos() 测试pound 转 kilo是否正确
setUp() 代码 (初始化变量和测试环境)
private Sample mSample;
<span style="white-space:pre"> </span>private TextView mTextView;
<span style="white-space:pre"> </span>private Button mckilo,mcpound;
<span style="white-space:pre"> </span>private EditText mkilo,mpound;
<span style="white-space:pre"> </span>@Override
protected void setUp() throws Exception{
super.setUp();
mSample = this.getActivity();
mTextView = (TextView) mSample.findViewById(com.example.samplejunit.R.id.resultview);
mckilo = (Button) mSample.findViewById(com.example.samplejunit.R.id.Kilos);
mcpound = (Button) mSample.findViewById(com.example.samplejunit.R.id.Pounds);
mkilo = (EditText) mSample.findViewById(com.example.samplejunit.R.id.inputvalueK);
mpound = (EditText) mSample.findViewById(com.example.samplejunit.R.id.inputvalueP);
}
tearDown() 代码
@Override
protected void tearDown() throws Exception{
super.tearDown();
}
testView() 代码
@SmallTest
public void testViews(){
assertNotNull(getActivity());
assertNotNull(mTextView);
assertNotNull(mckilo);
assertNotNull(mcpound);
assertNotNull(mkilo);
assertNotNull(mpound);
}
关于 smallTest,MediumTest,LargeTest的解释
Small: this test doesn't interact with anyfile system or network.
Medium: Accesses file systems on box whichis running tests.
Large: Accesses external file systems,networks, etc.
@SmallTest
public void testKilos2Pounds()
{
mkilo.clearComposingText();
//touchutils--can simulate touch event tapview--simulate touching the center of a view
TouchUtils.tapView(this, mkilo);
sendKeys("1"); // sending input to mKilos as 1
//click on the button
TouchUtils.clickView(this, mcpound); //simulate touching the center of view and release
double pounds;
try {
pounds = Double.parseDouble(mTextView.getText().toString());
} catch (NumberFormatException e) {
// TODO: handle exception
pounds = -1;
}
assertTrue("1 kilo is 2.20462262 pounds", pounds > 2.2 && pounds < 2.3);
}
@SmallTest
public void testPounds2Kilos()
{
mpound.clearComposingText();
TouchUtils.tapView(this, mpound);
sendKeys("1");
TouchUtils.clickView(this, mckilo);
double kilos;
try {
kilos = Double.parseDouble(mTextView.getText().toString());
} catch (NumberFormatException e) {
// TODO: handle exception
kilos = -1;
}
assertTrue("1 pound is 0.45359 kilos",kilos > 0.4 && kilos < 0.5);
}
代码完成啦,该运行test project啦。
SampleUnit 右键 → Run as → Android Junit test.
ok ,JUnit 关于android的简单介绍到此为止了,还有关于JUnit android 的文章可以 click here 。
另外如需查看源码,click here