`
gty509
  • 浏览: 55593 次
  • 性别: Icon_minigender_1
  • 来自: Bangkok
文章分类
社区版块
存档分类
最新评论

Android下的单元测试

阅读更多
在网络上找了半天,也没有找正确的Android的测试办法,最后还是自己琢磨出来的。以前就听我朋友说过,android毛病一堆,现在才体会到。Android SDK 和 iphone SDK 比,就不是一个档次的东西。网上总是有人说,Android还年轻,要体谅。我可不同意,要知道,android都已经出了好几个版本了,而现在最新的1.5版和iphone sdk的beta版都比不上。

先说说它的单元测试吧,基于1.5和eclipse。这里我说的是我的思路,有更加好的思路,欢迎指导。
我的方法:如果你要测试的不是Activity或者Service,就用AndroidTestCase;否则选择:ActivityUnitTestCase,ServiceTestCase。

在做单元测试以前,你需要创建一个新的项目,把要测试的项目包含到java build path中来。项目中的AndroidManifest.xml如下(这里假设你的your.test.package里面包含你的tests,your.work.package包含被测试的类):
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="your.tests.package">
    <application>
        <uses-library android:name="android.test.runner" />
    </application>
    <instrumentation android:name="android.test.InstrumentationTestRunner"
                     android:targetPackage="your.work.package"
                     android:label="Tests for Api Demos."/>

</manifest>


那么就可以做测试了,给出下面的实例;
1.用AndroidTestCase;
public class SdcardTest extends AndroidTestCase {
	public void test1(){
	//	Log.v()
		File f=new File("/sdcard");
		String[] l=f.list();
		this.assertTrue(f.exists());
		this.assertTrue(f.isDirectory());
		this.assertTrue(f.list().length>0);
	}
}

2.用ActivityUnitTestCase
public class ForwardingTest extends ActivityUnitTestCase<Forwarding> {

    private Intent mStartIntent;
    private Button mButton;

    public ForwardingTest() {
        super(Forwarding.class);
      }

    @Override
    protected void setUp() throws Exception {
        super.setUp();

        // In setUp, you can create any shared test data, or set up mock components to inject
        // into your Activity.  But do not call startActivity() until the actual test methods.
        mStartIntent = new Intent(Intent.ACTION_MAIN);
    }

    /**
     * The name 'test preconditions' is a convention to signal that if this
     * test doesn't pass, the test case was not set up properly and it might
     * explain any and all failures in other tests.  This is not guaranteed
     * to run before other tests, as junit uses reflection to find the tests.
     */
    @MediumTest
    public void testPreconditions() {
        startActivity(mStartIntent, null, null);
        mButton = (Button) getActivity().findViewById(R.id.go);
        
        assertNotNull(getActivity());
        assertNotNull(mButton);
    }
    
    /**
     * This test demonstrates examining the way that activity calls startActivity() to launch 
     * other activities.
     */
    @MediumTest
    public void testSubLaunch() {
        Forwarding activity = startActivity(mStartIntent, null, null);
        mButton = (Button) activity.findViewById(R.id.go);
        
        // This test confirms that when you click the button, the activity attempts to open
        // another activity (by calling startActivity) and close itself (by calling finish()).
        mButton.performClick();
        
        assertNotNull(getStartedActivityIntent());
        assertTrue(isFinishCalled());
    }
    
    /**
     * This test demonstrates ways to exercise the Activity's life cycle.
     */
    @MediumTest
    public void testLifeCycleCreate() {
        Forwarding activity = startActivity(mStartIntent, null, null);
        
        // At this point, onCreate() has been called, but nothing else
        // Complete the startup of the activity
        getInstrumentation().callActivityOnStart(activity);
        getInstrumentation().callActivityOnResume(activity);
        
        // At this point you could test for various configuration aspects, or you could 
        // use a Mock Context to confirm that your activity has made certain calls to the system
        // and set itself up properly.
        
        getInstrumentation().callActivityOnPause(activity);
        
        // At this point you could confirm that the activity has paused properly, as if it is
        // no longer the topmost activity on screen.
        
        getInstrumentation().callActivityOnStop(activity);
        
        // At this point, you could confirm that the activity has shut itself down appropriately,
        // or you could use a Mock Context to confirm that your activity has released any system
        // resources it should no longer be holding.

        // ActivityUnitTestCase.tearDown(), which is always automatically called, will take care
        // of calling onDestroy().
    }

}


分享到:
评论
7 楼 fkpwolf 2009-08-25  
看不出档次来哦
6 楼 gty509 2009-08-25  
proper 写道
gty509 写道
proper 写道
学习一下,虽然不是很热衷于单元测试.

顺便提一下,你如果用android这个自带工具生成项目的话,是会自动生成一个测试框架的.


你说的自带工具是指用android sdk吗?在eclipse以外的东西?


是sdk,在tools这个目录下,名字叫做android...


这样建立的项目,在引入到eclipse也是要分两个项目引入,主体程序一个,tests目录下面的一个。只有这样才能利用eclipse做单元测试。否则要自己写ant build.xml。

5 楼 proper 2009-08-25  
gty509 写道
proper 写道
学习一下,虽然不是很热衷于单元测试.

顺便提一下,你如果用android这个自带工具生成项目的话,是会自动生成一个测试框架的.


你说的自带工具是指用android sdk吗?在eclipse以外的东西?


是sdk,在tools这个目录下,名字叫做android...
4 楼 gty509 2009-08-25  
proper 写道
学习一下,虽然不是很热衷于单元测试.

顺便提一下,你如果用android这个自带工具生成项目的话,是会自动生成一个测试框架的.


你说的自带工具是指用android sdk吗?在eclipse以外的东西?
3 楼 proper 2009-08-24  
学习一下,虽然不是很热衷于单元测试.

顺便提一下,你如果用android这个自带工具生成项目的话,是会自动生成一个测试框架的.
2 楼 BarryWei 2009-08-24  
unit test 是一个让人头疼的问题 尤其这样内嵌式一样的东西 哎
1 楼 jjcang 2009-08-24  
ut,很有用,一直想弄,但没整出来,
email程序的测试一直没跑起来

相关推荐

    Android单元测试的小例子

    2. **Mockito**:在Android单元测试中,经常需要模拟(Mock)依赖项以隔离被测试的代码。Mockito是一个流行的Java库,允许我们创建和配置mock对象。例如,如果一个函数依赖于网络请求,我们可以用Mockito模拟网络...

    Android单元测试初探——Instrumentation

    学习Android有一段时间了,虽然前段时间对软件测试有了一些了解,不过接触android的单元测试却是头一次。这几天在物流大赛上也用了不少时间,所以对于android的单元测试没有太深入的研究,所以先写个基本入门吧!...

    Android-节省时间并在Android上清除您的单元测试

    首先,了解Android单元测试的基础至关重要。Android提供了JUnit框架,这是一个广泛用于Java的单元测试库,可以用于编写和运行测试用例。此外,Android Studio集成了TestNG,它提供了更多的功能和灵活性,如测试套件...

    Android单元测试Demo

    **Android单元测试Demo** 在Android应用开发中,单元测试是一种重要的质量保证手段,它能够帮助开发者验证代码的各个模块是否按预期工作。本Demo旨在提供一个基础的Android单元测试实践,通过实例化和运行测试用例...

    Android单元测试与Volley单元测试

    Android单元测试通常是指在没有实际设备或模拟器的情况下,对应用程序的各个模块进行独立测试。由于Android的运行环境依赖于Dalvik或ART虚拟机,因此常规的Java单元测试框架(如JUnit)不能直接用于Android。为了...

    Android 之 单元测试

    在Android开发中,单元测试是确保代码质量、可维护性和减少bug的重要手段。它允许开发者在修改或添加功能时,对各个...结合Android测试支持库,我们可以有效地对Android应用进行单元测试,确保其在各种场景下的正确性。

    Android单元测试-对Activity的测试

    上一篇文章已经介绍了单元测试的作用和简单示例,如果不了解的读者可以先阅读上一篇[ Android单元测试-作用以及简单示例](http://blog.csdn.net/double2hao/article/details/77159380)。 这篇文章主要介绍常见的...

    android 单元测试

    下面将详细介绍Android单元测试的相关知识点,以及如何利用JUnit进行测试。 首先,我们需要了解单元测试的基本概念。单元测试是对软件中的最小可测试单元进行检查和验证,如函数、方法或类。它的目标是确保代码的每...

    Android单元测试框架搭建手册

    ### Android单元测试框架搭建手册 #### 一、前言 随着移动互联网的快速发展,Android应用的质量成为了用户体验的关键因素之一。为了提高应用的质量,确保代码的可靠性和稳定性,单元测试成为了必不可少的一部分。...

    android单元测试实例二

    在这个"android单元测试实例二"中,我们将探讨如何对一个简单的加法函数进行单元测试,以及如何在同一个项目中组织测试代码。 首先,我们要理解单元测试的基本概念。单元测试是对软件中的最小可测试单元进行检查和...

    android单元测试实例一

    通过这个实例,你可以深入理解Android单元测试的工作原理,学会如何编写和执行测试用例,以及如何利用工具和框架优化测试流程。记住,良好的测试实践不仅能提升代码质量,还能降低维护成本,提高开发效率。

    Android unitTest 按键单元测试项目

    一、Android单元测试基础 单元测试是针对软件中的最小可测试单元进行验证,对于Android应用来说,这通常是指单个的Java或Kotlin类、方法或函数。通过单元测试,开发者可以在不依赖实际设备或模拟器的情况下,独立地...

    Android Studio单元测试技术1

    本文将详细介绍如何在Android Studio中进行单元测试,包括Java单元测试和App程序单元测试。 首先,Android Studio支持两种类型的单元测试:Java单元测试和Android应用单元测试。Java单元测试适用于纯Java代码,而...

    android单元测试

    通过以上分析,我们可以看出“android单元测试”是一个涵盖多种技术和实践的广泛话题,包括但不限于JUnit、AndroidJUnitRunner、Mockito、Robolectric等工具的使用,以及编写高效、全面的测试用例的技巧。...

    Android代码-Android中必要的一环—单元测试

    Android单元测试(一):JUnit框架的使用 Android单元测试(二):Mockito框架的使用 Android单元测试(三):PowerMock框架的使用 Android单元测试(四):Robolectric框架的使用 Android单元测试(五):网络接口...

    Android-全面的android应用单元测试方法及案例

    在Android应用开发中,单元测试是一项至关重要的任务,它能够确保代码的质量,提高软件的可靠性,并简化维护工作。本文将深入探讨如何利用Junit、Mockito以及Robolectric这三个强大的工具,来实现对MVP(Model-View-...

    参考官方客户端掘金,本项目仅仅用户学习目的,在Android Studio下使用单元测试,以及使用开源库Rxjava + R

    参考官方客户端『掘金』,本项目仅仅用户学习目的,在Android Studio下使用单元测试,以及使用开源库Rxjava + Retrofit 等进行快速开发 单元测试 junit4 使用到最多,配合retrofit和rajava进行restapi请求测试 mockito ...

    Android添加单元测试的方法与步骤

    使用JUnit进行Android单元测试时,需要注意,因为Android SDK提供的JUnit版本可能不包含完整的实现,所以可能需要在运行配置中指定JRE,并添加JUnit库。如果在Eclipse中,可以通过`Run Configurations`来调整`...

Global site tag (gtag.js) - Google Analytics