您的位置:首页 > 移动开发 > Android开发

Android JUnit测试说明和实例演示

2013-05-16 10:03 731 查看


什么是 JUnit ?

JUnit是采用测试驱动开发的方式,也就是说在开发前先写好测试代码,主要用来说明被测试的代码会被如何使用,错误处理等;然后开始写代码,并在测试代码中逐步测试这些代码,直到最后在测试代码中完全通过。


现简要说JUnit的4大功能

管理测试用例。修改了哪些代码,这些代码的修改会对哪些部分有影响,通过JUnit将这次的修改做个完整测试。这也就JUnit中所谓的TestSuite。
定义测试代码。这也就是JUnit中所谓的TestCase,根据源代码的测试需要定义每个TestCase,并将TestCase添加到相应的TestSuite方便管理。
定义测试环境。在TestCase测试前会先调用“环境”配置,在测试中使用,当然也可以在测试用例中直接定义测试环境。
检测测试结果。对于每种正常、异常情况下的测试,运行结果是什么、结果是否是我们预期的等都需要有个明确的定义,JUnit在这方面提供了强大的功能。

以上部分与我们平常使用IDE调试的过程是完全一样的,只不过是增加了测试用例管理、测试结果检测等功能,提高了单元的效率,保证了单元测试的完整性,明确了单元测试的目标。

一个 JUnit 测试包含以下元素:
开发代码部分测试代码部分测试工具部分
待测试类 A通过扩展 TestCase 或者构造 TestSuit 方法

编写测试类 B
一个测试运行器(TestRunner)R,可以选择图形界面或文本界面

操作步骤:

将 B 通过命令行方式或图形界面选择方式传递给 R,R 自动运行测试,并显示结果。
首先看下junit测试类库和android中单元测试类库:



SDK功能说明
junit.frameworkJUnit测试框架
junit.runner实用工具类支持JUnit测试框架
android.testAndroid 对JUnit测试框架的扩展包
android.test.mockAndroid的一些辅助类
android.test.suitebuilder实用工具类,支持类的测试运行

junit.framework中的方法解释:



TestSuit:
TestSuite
是测试用例的集合;

TestCase:定义运行多个测试用例;
TestResult:收集一个测试案例的结果,测试结果分为失败和错误,如果未能预计的断言就是失败,错误就像一个ArrayIndexOutOfBoundsException异常而导致的无法预料的问题;
TestFailure:测试失败时捕获的异常;
Assert:断言的方法集,当断言失败时显示信息;

下面给出一个实例:

AndroidManifest.xml



<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.android.junit"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="8" />

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name="com.android.junittest.MyJUnitActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <!-- Android JUnit配置 -->
		<uses-library android:name="android.test.runner" />
    </application>
	<!-- 注:targetPackage与上面mainfest的package相同即可 -->
	<instrumentation android:targetPackage="com.android.junit" 
			android:name="android.test.InstrumentationTestRunner" 
			android:label="Android JUnit测试" />
</manifest>


Activity类,只是给出一个界面,没有实际的用途



package com.android.junit;

import com.android.junit.R;

import android.app.Activity;
import android.os.Bundle;

public class MyJUnitActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}


需要测试的类



package com.android.junit;

public class Apps {
	public void methodA() {
		System.out.println("---Hello!");
	}
	
	public void methodB(String name) {
		System.out.println("---Hello " + name + "!");
	}
}


测试类

package com.android.junittest;
import com.android.junit.Apps;
import android.test.AndroidTestCase;

public class AppsTester extends AndroidTestCase {
	Apps a = null;
	
	private int i1;
	private int i2;
	
	protected void setUp() throws Exception {
		a = new Apps();
		i1 = 1;
		i2 = 2;
	}
	public void testMethodA() {
		a.methodA();
		
	}
	
	public void testMethodB() {
		a.methodB("Android");
	}
	
	//这是一个错误的测试
	public void testAdd() {
		assertTrue("testAddFailed", (i1 + i2) == 4);
	}
	
	public void testDec() {
		assertTrue("testDecFailed", (i2 - i1) == 1);
	}
	
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: