Junit and android test

参考:http://www.open-open.com/lib/view/open1328152424546.html

搭建Junit 

http://zhidao.baidu.com/link?url=vMCO-E0_utuzonHcMnZ-xj0168uooyIV7fnDRttjbTdZmIw5daFYD2x549IRZ1eslePTvB7mc-mpuJa5zfvCDdJwqmamO5UHFDgAenmismO

java file

package cn.edu.wtu.junit;
 
public class Calcuator {
    public double add(double n1, double n2) {
        return n1 + n1;
    }
}

testcase file

package cn.edu.wtu.junit;

import junit.framework.TestCase;

public class TestCalcuator extends TestCase {
	
	public void testAdd1(){
		Calcuator calcuator = new Calcuator();
		double result = calcuator.add(1, 2);
		assertEquals(3,result,1);
	}
	public void testAdd2(){
		Calcuator calcuator = new Calcuator();
		double result = calcuator.add(1, 2);
		assertEquals(0,result,0);
	}
	public void testAdd3(){
	}
}
junit中:assertEquals(expResult, result,0.0);
expResult  你期望的结果,即你预测程序运行后出现的结果
result 实际运行后得到的结果。
0.0 两个结果间的允许误差

testsuit file

package cn.edu.wtu.junit;
 
import junit.framework.Test;
import junit.framework.TestSuite;
import junit.textui.TestRunner;
 
public class TestAll extends TestSuite {

	
	public static Test getSuite(){
		TestSuite test = new TestSuite("test");
		test.addTestSuite(TestCalcuator.class);
		test.addTestSuite(TestCalcuator2.class);
		return test;
	}
	
    public static void main(String args[]){
    	TestRunner.run(getSuite());
    }
}

控制台输出:

..F...F.
Time: 0.002
There were 2 failures:
1) testAdd2(cn.edu.wtu.junit.TestCalcuator)junit.framework.AssertionFailedError: expected:<0.0> but was:<2.0>
	at cn.edu.wtu.junit.TestCalcuator.testAdd2(TestCalcuator.java:15)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at cn.edu.wtu.junit.TestAll.main(TestAll.java:18)
2) testAdd2(cn.edu.wtu.junit.TestCalcuator2)junit.framework.AssertionFailedError: expected:<0.0> but was:<2.0>
	at cn.edu.wtu.junit.TestCalcuator2.testAdd2(TestCalcuator2.java:15)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at cn.edu.wtu.junit.TestAll.main(TestAll.java:18)

FAILURES!!!
Tests run: 6,  Failures: 2,  Errors: 0

android test

首先看下非instrumentation框架测试

代码:

AndroidTestCase文件
package aexp.junit;
 
import android.content.ContentResolver;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.provider.Contacts;
import android.util.Log;
import android.test.AndroidTestCase;
 
public class ContactTest extends AndroidTestCase
{
    static final String LOG_TAG = "ContactTest";
    static final String TESTUSER_NAME = "Test User";
    static final String TESTUSER_NOTES = "Test note";
    ContentResolver contentResolver;
    Uri newPerson;
 
    public void setUp()
    {
        contentResolver = getContext().getContentResolver();
        ContentValues person = new ContentValues();
        person.put(Contacts.People.NAME, TESTUSER_NAME );
        person.put(Contacts.People.NOTES, TESTUSER_NOTES );
 
        newPerson = contentResolver.insert(
                    Contacts.People.CONTENT_URI,person);
    }
 
    public void testInsertContact()
    {
        Log.d( LOG_TAG, "testInsertContact" );
        assertNotNull( newPerson );
    }
 
    public void testQueryContact()
    {
        Log.d( LOG_TAG, "testQueryContact" );
        String columns[] = { Contacts.People.NAME,
                            Contacts.People.NOTES };
        Cursor c = contentResolver.query( Contacts.People.CONTENT_URI,
                    columns,
                    Contacts.People.NAME+"=?",
                    new String[] { TESTUSER_NAME },
                    null );
        assertNotNull( c );
        int hits = 0;
        while( c.moveToNext() )
        {
            int nameColumnIndex = c.getColumnIndex( Contacts.People.NAME );
            int notesColumnIndex = c.getColumnIndex( Contacts.People.NOTES );
            String name = c.getString( nameColumnIndex );
            String notes = c.getString( notesColumnIndex );
            Log.d( LOG_TAG,"retrieved name: "+name );
            Log.d( LOG_TAG,"retrieved notes: "+notes );
            assertEquals( TESTUSER_NAME, name );
            assertEquals( TESTUSER_NOTES, notes );
            ++hits;
        }
        assertEquals( hits,1 );
        c.close();
    }
    
    @Override
    public void tearDown()
    {
        contentResolver.delete( newPerson, null, null );
    }
}

  

AndroidTestCase文件
package aexp.junit;
 
import android.test.AndroidTestCase;
import android.util.Log;
 
public class MathTest extends AndroidTestCase
{
    protected int i1;
    protected int i2;
    static final String LOG_TAG = "MathTest";
 
    
    
    @Override
    public void setUp()
    {
        i1 = 2;
        i2 = 3; 
    }
 
    public void testAdd()
    {
        Log.d( LOG_TAG, "testAdd" );
        assertTrue( LOG_TAG+"1", ( ( i1 + i2 ) == 5 ) );
    }
 
    public void testAndroidTestCaseSetupProperly()
    {
        super.testAndroidTestCaseSetupProperly();
        Log.d( LOG_TAG, "testAndroidTestCaseSetupProperly" );
    }
}

  testcase文件

package aexp.junit;
 
import junit.framework.TestCase;
import junit.framework.TestSuite;
import junit.framework.Assert;
 
public class SomeTest extends  TestCase{
    public void testSomething() throws Throwable
    {
           Assert.assertTrue(1 + 1 == 2);
    }
 
    public void testSomethingElse() throws Throwable
    {
           Assert.assertTrue(1 + 1 == 3);
    }
}

  suite 文件

package aexp.junit;
 
import junit.framework.TestSuite;
 
public class ExampleSuite extends TestSuite
{
    public ExampleSuite()
    {
        addTestSuite( MathTest.class );
        addTestSuite( ContactTest.class );
        addTestSuite(SomeTest.class);
    }
}

  新建andoridTest工程后 menifest中自动生成如下

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

    <uses-sdk android:minSdkVersion="7" />

    <instrumentation
        android:name="android.test.InstrumentationTestRunner"
        android:targetPackage="aexp.junit.test" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <uses-library android:name="android.test.runner" />
    </application>

</manifest>

讲解:

setup 初始化

teardown 程序执行结束后 回收变量

instrumentation框架:

package com.example.testandroidtestactivity.test;

import android.app.Instrumentation;
import android.test.ActivityInstrumentationTestCase2;
import android.test.UiThreadTest;
import android.widget.TextView;

import com.example.testandroidtestactivity.MainActivity;

public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActivity> {

	public MainActivityTest(Class<MainActivity> activityClass) {
		super(activityClass);
	}
	@SuppressWarnings("deprecation")
	public MainActivityTest() {
        super("cn.edu.wtu.junit", MainActivity.class);
    }
	
	private Instrumentation mInstrument;
	private MainActivity mActivity;
	private TextView tv;
	
	@Override
	protected void setUp() throws Exception {
		super.setUp();
		mInstrument = getInstrumentation();
        // 启动被测试的Activity
        mActivity = getActivity();
        tv = (TextView) mActivity.findViewById(com.example.testandroidtestactivity.R.id.tv);
	}

	public void testUITextView(){
		
		  mInstrument.runOnMainSync(new Runnable() {
	            public void run() {
	            	tv.setText("test text!!");
	            }
	        });
	}
	
	
	@Override
	protected void tearDown() throws Exception {
		// TODO Auto-generated method stub
		super.tearDown();
	}

	@Override
	protected void runTest() throws Throwable {
		// TODO Auto-generated method stub
		super.runTest();
	}
	
	

}

  

原文地址:https://www.cnblogs.com/wjw334/p/4364012.html