zoukankan      html  css  js  c++  java
  • 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();
    	}
    	
    	
    
    }
    

      

  • 相关阅读:
    2. Add Two Numbers
    1. Two Sum
    leetcode 213. 打家劫舍 II JAVA
    leetcode 48. 旋转图像 java
    leetcode 45. 跳跃游戏 II JAVA
    leetcode 42. 接雨水 JAVA
    40. 组合总和 II leetcode JAVA
    24. 两两交换链表中的节点 leetcode
    1002. 查找常用字符 leecode
    leetcode 23. 合并K个排序链表 JAVA
  • 原文地址:https://www.cnblogs.com/wjw334/p/4364012.html
Copyright © 2011-2022 走看看