使用ThreadingTest进行Android应用单元测试

上一篇 / 下一篇  2014-07-29 10:21:20

1、Android单元测试的编写

Android单元测试有两种方法,首先作为java程序,可以试用JUnit Test进行测试,另外也可使用Android JUnit Test进行单元测试。

1)、JUnit Test进行单元测试

JUnit对Android应用程序进行单元测试需要使用Java命令来启动或者在eclipse里面将启动的Bootstrap Entries改为JRE,但是这种只能测试逻辑代码,因为是是运行在JVM上,而不是Android系统中,所以不能测试Android有关的代码。

使用JUnit测试的代码,需要在函数的之前加@Test,函数必须为public类型,在eclipse中,在类上右击,选择JUnit Test即可进行测试。

2)AndroidJUnit Test进行单元测试

Android JUnit Test单元测试是一组直接或间接继承自junit.framework.Testcase的类集合,入口是InstrumentationTestRunner。

使用Android JUnit Test测试,也存在两种测试方法,测试驱动与测试代码在同一工程下和测试驱动和测试代码位于不同工程,两者之间并无巨大差异,只是在测试时,前者只安装一个App,后者安装两个App。

如下为一个单元测试的实例:

步骤 1:准备好需要测试的源代码

步骤2:添加测试类,编写测试代码

package calculator.xwg.test;

 

import java.util.ArrayList;

import java.util.LinkedList;

import android.test.ActivityInstrumentationTestCase2;

import android.app.AlertDialog;

import android.app.Instrumentation;

import android.widget.Button;

import android.widget.ListView;

import android.widget.TextView;

import calculator.xwg.CalculatorMainActivity;

 

public class CalculatorMainActivityTest extends

        ActivityInstrumentationTestCase2<CalculatorMainActivity> {

    private InstrumentationmInstrumentation;

    private CalculatorMainActivitymActivity;

    private TextViewmQuestionText;

    private TextViewmAnswerText;

    private ButtonmCalculateButton;

    private ButtonmButton1;

    private ButtonmButtonPlus;

    private ButtonmButtonAngle;

    private ButtonmButtonDegree;

    private ButtonmButtonF6;

   

    class AssertPair{

        public AssertPair(CharSequence quest, CharSequence res){

            question = quest;

            result = res;

        }

        boolean assertResult(){

            return (question.toString().compareTo(result.toString()) == 0);

        }

        public CharSequencequestion;

        public CharSequenceresult;

    }

   

    ArrayList<AssertPair> assertList =new ArrayList<AssertPair>();

    AssertPair mAssertPair;

    FailureInfo mFailureInfo;

 

    @SuppressWarnings("deprecation")

    public CalculatorMainActivityTest() {

        super("calculator.xwg", CalculatorMainActivity.class);

        // TODO Auto-generated constructor stub

    }

   

    @Override

    protected void setUp() throws Exception {

        super.setUp();

        mInstrumentation = getInstrumentation();

        setActivityInitialTouchMode(false);

 

        mActivity = (CalculatorMainActivity) getActivity();

        mQuestionText = (TextView)mActivity.findViewById(calculator.xwg.R.id.textQuestion);

        mAnswerText = (TextView)mActivity.findViewById(calculator.xwg.R.id.textAnswer);

        mCalculateButton = (Button)mActivity.findViewById(calculator.xwg.R.id.button74);

        mButton1 = (Button)mActivity.findViewById(calculator.xwg.R.id.button60);

        mButtonPlus = (Button)mActivity.findViewById(calculator.xwg.R.id.button63);

        mButtonAngle = (Button)mActivity.findViewById(calculator.xwg.R.id.button03);

        mButtonDegree = (Button)mActivity.findViewById(calculator.xwg.R.id.button02);

        mButtonF6 = (Button)mActivity.findViewById(calculator.xwg.R.id.buttonF6);

       

        mActivity.engine.clearCustomFunctions();

    } // end of setUp() method definition

   

    @Override

    protected void tearDown() throws Exception {

        mActivity.engine.clearCustomFunctions();

        super.tearDown();

    }

 

    public void testPreConditions() {

         //assertTrue(mSpinner.getOnItemSelectedListener() != null);

         //assertTrue(mPlanetData != null);

         //assertEquals(mPlanetData.getCount(),ADAPTER_COUNT);

    } // end of testPreConditions() method definition

     

    public void testCalculate() {

        LinkedList<AssertPair> checkItemList = new LinkedList<AssertPair>();

        checkItemList.add(new AssertPair("1-2×((3+4)/58+8)×25%","-3.06034482759"));

        checkItemList.add(new AssertPair("root(16,4)","2"));

        checkItemList.add(new AssertPair("sin(0°)","0"));

        checkItemList.add(new AssertPair("sin(30°)","0.5"));

        checkItemList.add(new AssertPair("sin(390°)","0.5"));

        checkItemList.add(new AssertPair("sin(-330°)","0.5"));

        checkItemList.add(new AssertPair("sin(90°)","1"));

        checkItemList.add(new AssertPair("sin(145°)","0.573576436351"));

        checkItemList.add(new AssertPair("sin(180°)","0"));

        checkItemList.add(new AssertPair("sin(200°)","-0.342020143326"));

        checkItemList.add(new AssertPair("sin(270°)","-1"));

        checkItemList.add(new AssertPair("sin(300°)","-0.866025403784"));

        checkItemList.add(new AssertPair("sin(360°)","0"));

        checkItemList.add(new AssertPair("sin(π/6)","0.5"));

        checkItemList.add(new AssertPair("tan(0)","0"));

        checkItemList.add(new AssertPair("tan(0.2)","0.202710035509"));

        checkItemList.add(new AssertPair("tan(0.4)","0.422793218738"));

        checkItemList.add(new AssertPair("tan(0.6)","0.684136808342"));

        checkItemList.add(new AssertPair("tan(0.8)","1.02963855705"));

        checkItemList.add(new AssertPair("tan(1.0)","1.55740772465"));

        checkItemList.add(new AssertPair("tan(1.2)","2.57215162213"));

        checkItemList.add(new AssertPair("tan(1.4)","5.79788371548"));

        checkItemList.add(new AssertPair("tan(1.8)","-4.28626167463"));

        checkItemList.add(new AssertPair("tan(2.0)","-2.18503986326"));

        checkItemList.add(new AssertPair("tan(2.2)","-1.37382305677"));

        checkItemList.add(new AssertPair("tan(2.4)","-0.916014289673"));

        checkItemList.add(new AssertPair("tan(2.6)","-0.60159661309"));

        checkItemList.add(new AssertPair("tan(2.8)","-0.355529831651"));

        checkItemList.add(new AssertPair("tan(3.0)","-0.142546543074"));

        checkItemList.add(new AssertPair("tan(3.2)","0.0584738544596"));

        checkItemList.add(new AssertPair("tan(π/2)","tan:Invalid input."));

        checkItemList.add(new AssertPair("tan(π)","0"));

        checkItemList.add(new AssertPair("tan(π/2×3)","tan:Invalid input."));

        checkItemList.add(new AssertPair("tan(2×π)","0"));

        checkItemList.add(new AssertPair("tan(45°)","1"));

        checkItemList.add(new AssertPair("tan(90°)","tan:Invalid input."));

        checkItemList.add(new AssertPair("tan(405°)","1"));

        checkItemList.add(new AssertPair("tan(-315°)","1"));

        checkItemList.add(new AssertPair("tan(-675°)","1"));

        checkItemList.add(new AssertPair("1+1","2"));

        checkItemList.add(new AssertPair("(1+2i)×(3-4i)/(5+6i)","1.0983607-0.91803279i"));

       

        for(final AssertPair pair : checkItemList){

            mActivity.runOnUiThread(

                new Runnable() {

                    publicvoid run() {

                        mQuestionText.setText(pair.question);

                        mActivity.onButtonClick(mCalculateButton);

                    }

                }

            );

            mInstrumentation.waitForIdleSync();

            assertEquals("The result of " + pair.question +":", pair.result,mAnswerText.getText());

        }

    }

   

    public void testConvert() {

        mActivity.runOnUiThread(

            new Runnable() {

                publicvoid run() {

                    mQuestionText.setText("1-i");

                    mActivity.onButtonClick(mButtonAngle);

                }

            }

        );

        mInstrumentation.waitForIdleSync();

assertEquals("1.41421365.4977871",mAnswerText.getText());

        mActivity.runOnUiThread(

                new Runnable() {

                    publicvoid run() {

                        mQuestionText.setText("1-i");

                        mActivity.onButtonClick(mButtonDegree);

                    }

                }

            );

        mInstrumentation.waitForIdleSync();

        assertEquals("1.4142136315°",mAnswerText.getText());

    }

   

    public void testContinue() {

        mActivity.runOnUiThread(

            new Runnable() {

                publicvoid run() {

                    mQuestionText.setText("1-i");

                    mActivity.onButtonClick(mButtonAngle);

                    assertList.add(new AssertPair("1.41421365.4977871",mAnswerText.getText()));

                    mActivity.onButtonClick(mButtonDegree);

                    assertList.add(new AssertPair("1.4142136315°",mAnswerText.getText()));

                }

            }

        );

        mInstrumentation.waitForIdleSync();

        for(AssertPair pair :assertList){

            assertEquals(pair.question, pair.result);

        }

        assertList.clear();

    }

   

    public void testCustomFunction() {

        mActivity.runOnUiThread(

            new Runnable() {

                publicvoid run() {

                    mActivity.onButtonClick(mButtonF6);

                    mActivity.onButtonClick("5");

                    mActivity.onButtonClick(")");

                    mActivity.onButtonClick("=");

                   

                    mFailureInfo = FailureInfo.checkFailure("Unknown keyword:F",mAnswerText.getText());

                    if(mFailureInfo !=null)return;

                   

                    mQuestionText.setText("π×#1×#1");

                    mActivity.onButtonClick("FS");

                    TextView tv = (TextView)mActivity.mDialog.findViewById(calculator.xwg.R.id.inputText);

                    tv.setText("Test");

                    Button k = (Button)mActivity.mDialog.findViewById(calculator.xwg.R.id.buttonOK);

                    ok.performClick();

                    ListView lv = (ListView)((AlertDialog)mActivity.mDialog).getListView();

                    lv.requestFocus();

                    lv.setSelection(5);

                    lv.performItemClick(null, 5, 5);

                   

                    mActivity.onButtonClick(mButtonF6);

                    

TAG: 软件测试 移动测试 白盒测试

 

评分:0

我来说两句

日历

« 2024-04-21  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 13737
  • 日志数: 17
  • 建立时间: 2014-05-28
  • 更新时间: 2014-10-07

RSS订阅