一、Android单元测试
基本流程
新建一个测试工程( Android Test Project),选择你要测试的工程,或者说你要测试的类所在的工程,创建测试用例,如果有需要还可以建立TestSuite来配置要测试的用例,最后右键选择测试用例类,run as – >“Android Junit Test” 即可。然后你也可以直接在被测试工程中测试,这样不需要建立测试工程。
1、建立测试工程
图 1
2、选择要测试的工程
图 2
3、选择目标平台
图 3
4、选择finish后,在AndroidManifest.xml中填写如下代码:
<! – 添加InstrumentationTestRunner ,targetPackage修改成你的测试工程的包名即可--> <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.example.umengsocialtest" /> <! – application 添加test runner --> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <! – 添加test runner --> <uses-library android:name="android.test.runner" /> </application>
5、右键点击测试工程的“src”目录,选择”new”-->“Junit Test Case”,然后输入测试用例名称和要继承的测试类,正常情况下,继承自AndroidTestCase即可,如果你要测试的类依赖于Activity,你可以继承自ActivityInstrumentationTestCase2<T>,其中T为你mock的Activity,你可以在测试工程下新建一个Activity用于测试,这里我们选择继承自ActivityInstrumentationTestCase2。最后选择你要测试的类,这里我选择的是UMAppAdapter。选择”next”,然后选择你要测试的方法,勾选即可。如图4
图 4
6、选择要测试的方法
7、如果你要测试的类需要Activity参数,你可以创建一个Activity来用于测试,使用AndroidTestCasse则不需要这么做。代码如下:
public class MockActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }
8、在测试用例中,填写代码
public class UMAppAdapterTest extends ActivityInstrumentationTestCase2<MockActivity> { /** * */ private Activity mActivity = null; /** * */ private UMBaseAdapter mAdapter = null; /** * @Title: UMAppAdapterTest * @Description: * UMAppAdapterTest Constructor * * @param activityClass */ public UMAppAdapterTest(Class<MockActivity> activityClass) { super(activityClass); } public UMAppAdapterTest() { super(MockActivity.class); setName("MockActivity"); } @Before protected void setUp() throws Exception { super.setUp(); mActivity = getActivity(); assertNotNull(mActivity); } @After protected void tearDown() throws Exception { super.tearDown(); mActivity = null; clearState(); } @Test public void testGetBitmap() { mAdapter = new UMAppAdapter(mActivity); // 实际会触发截屏操作,返回当前截屏 assertNotNull(mAdapter.getBitmap()); // 使用控制器来截图, 实际上调用的是mAdapter.getBitmap() UMScrShotController controller = UMScrShotController.getInstance(); controller.setAdapter(mAdapter); assertNotNull(controller.takeScreenShot()); } }
为了篇幅简短,这里只列出了部分测试用例代码。
二、TestSuite的使用
1、新建一个JunitTest Case,父类选择TestSuite,如图6。
图 6
2、样例代码如下,覆写suite(),然后添加你要测试的测试用例即可。com.example.socialtest.ut.scrshotlib.UMAppAdapterTest是UMAppAdapterTest这个测试用例的完整路径,添加进去即可。多个测试用例使用逗号隔开。如下:
public class YourTestSuite extends TestSuite { public static Test suite() { return new TestSuiteBuilder(SocialTestSuite.class).includePackages( "com.example.socialtest.ut.scrshotlib.UMAppAdapterTest", "com.example.socialtest.ut.scrshotlib.UMScrShotControllerTest" ).build(); } }
3、最后右键选择你的TestSuite类,选择”runas “, 然后选择android Junit Test即可运行TestSuite.。
如图7。
图7