第一步:新建一个TestCase,记得要继承androidTestCase,才能有getContext()来获取当前的上下文变量,这在Android测试中很重要的,因为很多的Android api都需要context。
Java代码
-
- publicclassTestMathextendsAndroidTestCase{
-
- privateinti1;
- privateinti2;
-
staticfinalStringLOG_TAG="MathTest";
-
- @Override
- protectedvoidsetUp()throwsException{
-
i1=2;
-
i2=3;
- }
-
- publicvoidtestAdd(){
- assertTrue("testAddfailed",((i1+i2)==5));
- }
-
- publicvoidtestDec(){
- assertTrue("testDecfailed",((i2-i1)==1));
- }
-
- @Override
- protectedvoidtearDown()throwsException{
- super.tearDown();
- }
-
- @Override
- publicvoidtestAndroidTestCaseSetupProperly(){
- super.testAndroidTestCaseSetupProperly();
- //Log.d(LOG_TAG,"testAndroidTestCaseSetupProperly");
- }
-
- }
第二步:新建一个TestSuit,这个就继承Junit的TestSuite就可以了,注意这里是用的addTestSuite方法,一开始使用addTest方法就是不能成功。
Java代码
-
- publicclassExampleSuiteextendsTestSuite{
-
- publicExampleSuite(){
- addTestSuite(TestMath.class);
- }
-
- }
第三步:新建一个Activity,用来启动单元测试,并显示测试结果。系统的AndroidTestRunner竟然什么连个UI界面也没有实现,这里只是最简单的实现了一个
Java代码
- publicclassTestActivityextendsActivity{
-
- privateTextViewresultView;
-
- privateTextViewbarView;
-
- privateTextViewmessageView;
-
- privateThreadtestRunnerThread;
-
-
privatestaticfinalintSHOW_RESULT=0;
-
-
privatestaticfinalintERROR_FIND=1;
-
- @Override
- protectedvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
-
resultView=(TextView)findViewById(R.id.ResultView);
-
barView=(TextView)findViewById(R.id.BarView);
-
messageView=(TextView)findViewById(R.id.MessageView);
-
Buttonlunch=(Button)findViewById(R.id.LunchButton);
- lunch.setOnClickListener(newView.OnClickListener(){
- @Override
- publicvoidonClick(Viewv){
- startTest();
- }
- });
- }
-
- privatevoidshowMessage(Stringmessage){
- hander.sendMessage(hander.obtainMessage(ERROR_FIND,message));
- }
-
- privatevoidshowResult(Stringtext){
- hander.sendMessage(hander.obtainMessage(SHOW_RESULT,text));
- }
-
- privatesynchronizedvoidstartTest(){
- if(testRunnerThread!=null
- &&testRunnerThread.isAlive()){
-
testRunnerThread=null;
- }
-
if(testRunnerThread==null){
-
testRunnerThread=newThread(newTestRunner(this));
- testRunnerThread.start();
- }else{
- Toast.makeText(this,
- "Testisstillrunning",
- Toast.LENGTH_SHORT).show();
- }
- }
-
-
publicHandlerhander=newHandler(){
- publicvoidhandleMessage(Messagemsg){
- switch(msg.what){
- caseSHOW_RESULT:
- resultView.setText(msg.obj.toString());
- break;
- caseERROR_FIND:
- messageView.append(msg.obj.toString());
- barView.setBackgroundColor(Color.RED);
- break;
- default:
- break;
- }
- }
- };
-
- classTestRunnerimplementsRunnable,TestListener{
-
- privateActivityparentActivity;
-
- privateinttestCount;
-
- privateinterrorCount;
-
- privateintfailureCount;
-
- publicTestRunner(ActivityparentActivity){
-
this.parentActivity=parentActivity;
- }
-
- @Override
- publicvoidrun(){
-
testCount=0;
-
errorCount=0;
-
failureCount=0;
-
-
ExampleSuitesuite=newExampleSuite();
-
AndroidTestRunnertestRunner=newAndroidTestRunner();
- testRunner.setTest(suite);
- testRunner.addTestListener(this);
- testRunner.setContext(parentActivity);
- testRunner.runTest();
- }
-
- @Override
- publicvoidaddError(Testtest,Throwablet){
- errorCount++;
- showMessage(t.getMessage()+"\n");
- }
-
- @Override
- publicvoidaddFailure(Testtest,AssertionFailedErrort){
- failureCount++;
- showMessage(t.getMessage()+"\n");
- }
-
- @Override
- publicvoidendTest(Testtest){
- showResult(getResult());
- }
-
- @Override
- publicvoidstartTest(Testtest){
- testCount++;
- }
-
- privateStringgetResult(){
-
intsuccessCount=testCount-failureCount-errorCount;
- return"Test:"+testCount+"Success:"+successCount+"Failed:"+failureCount+"Error:"+errorCount;
- }
-
- }
-
- }
第四步:修改AndroidManifest.xml,加入,不然会提示找不到AndroidTestRunner,这里需要注意是这句话是放在applications下面的,我一开始也不知道,放错了地方,浪费了不少时间
Xml代码
- xmlversion="1.0"encoding="utf-8"?>
-
<manifestxmlns:Android="http://schemas.Android.com/apk/res/Android"
-
package="com.test.sample"
-
Android:versionCode="1"
-
Android:versionName="1.0">
-
<applicationAndroid:icon="@drawable/icon"Android:label="@string/app_name"Android:debuggable="true">
-
<activityAndroid:name=".TestActivity"
-
Android:label="@string/app_name">
-
<intent-filter>
-
<actionAndroid:name="Android.intent.action.MAIN"/>
-
<categoryAndroid:name="Android.intent.category.LAUNCHER"/>
-
intent-filter>
-
activity>
-
<uses-libraryAndroid:name="Android.test.runner"/>
-
application>
-
<uses-sdkAndroid:minSdkVersion="4"/>
- manifest>
分享到:
相关推荐
我们曾经和大家探讨过全面剖析JavaME单元测试理念,其实在Android上实现JUnit单元测试也不是很困难,主要是在配置文件和测试环境上将花费很长时间,下面从四步简单讲一下在Android上实 我们曾经和大家探讨过全面...
Android Studio JUnit单元测试
Android JUnit单元测试基本实例
Junit单元测试Junit单元测试Junit单元测试Junit单元测试
Junit单元测试Junit单元测试Junit单元测试Junit单元测试
junit3 junit4 api,单元测试的利器
在本文中,你将会学习到如何在Eclipse中创建Android JUnit的单元测试工程以及在不同的条件下创建及运行自动测试用例
简单介绍了Junit的安装过程与实例应用。应用的问题是软件测试中的佣兵问题,整个文档中有代码及测试结果,可以更好地帮助学生了解Junit单元测试中的作用。
上下文时间软件测试中Junit单元测试实例在一种传统的结构化编程语言中,比如C,要进行测试的单元一般是函数或子过程。在象C++这样的面向对象的语言中,要进行测试的基本单元是类。对Ada语言来说,开发人员可以选择是...
junit单元测试junit单元测试junit单元测试
Junit 单元测试 包括Spring Struts 两个模块的测试案例。附源码
在java中使用 junit单元测试,eclipse 使用Junit为java程序做单元测试,图文教程,非常使用
springmvc项目搭建并实现Junit单元测试源码
在Eclipse中使用JUnit4进行单元测试!
Junit单元测试指南 Junit单元测试指南 Junit单元测试指南 Junit单元测试指南 Junit单元测试指南 Junit单元测试指南
包含junit-4.11.jar, dbunit-2.4.9.jar, unitils-3.3-with-dependencies.zip, mockito-1.9.5.zip
Junit java单元测试内部机制解析
应用JUnit实施单元测试 JUnit的框架原理分析 JUnit主要用于单元测试,所谓的单元测试就是常常说的白盒测试
JUnit 在测试驱动的开发方面有很重要的发展,是起源于 JUnit 的一个统称为 xUnit 的单元测试框架之一。 2 单元测试概念 单元:在Java中,一个类就是一个单元 单元测试:程序猿编写的一小段代码,用来对某个类中的...