JUnit是采用测试驱动开发的方式,也就是说在开发前先写好测试代码,主要用来说明被测试的代码会被如何使用,错误处理等;然后开始写代码,并在测试代码中逐步测试这些代码,直到最后在测试代码中完全通过。
以上部分与我们平常使用IDE调试的过程是完全一样的,只不过是增加了测试用例管理、测试结果检测等功能,提高了单元的效率,保证了单元测试的完整性,明确了单元测试的目标。
一个 JUnit 测试包含以下元素:
开发代码部分 | 测试代码部分 | 测试工具部分 |
待测试类 A | 通过扩展 TestCase 或者构造 TestSuit 方法 编写测试类 B |
一个测试运行器(TestRunner)R,可以选择图形界面或文本界面 |
操作步骤:
将 B 通过命令行方式或图形界面选择方式传递给 R,R 自动运行测试,并显示结果。
首先看下junit测试类库和android中单元测试类库:
SDK | 功能说明 |
junit.framework | JUnit测试框架 |
junit.runner | 实用工具类支持JUnit测试框架 |
android.test | Android 对JUnit测试框架的扩展包 |
android.test.mock | Android的一些辅助类 |
android.test.suitebuilder | 实用工具类,支持类的测试运行 |
junit.framework中的方法解释:
TestSuite
是测试用例的集合;下面给出一个实例:
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>
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); } }