使用ThreadingTest进行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() { // 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.4142136∠5.4977871",mAnswerText.getText()); mActivity.runOnUiThread( new Runnable() { publicvoid run() { mQuestionText.setText("1-i"); mActivity.onButtonClick(mButtonDegree); } } ); mInstrumentation.waitForIdleSync(); assertEquals("1.4142136∠315°",mAnswerText.getText()); }
public void testContinue() { mActivity.runOnUiThread( new Runnable() { publicvoid run() { mQuestionText.setText("1-i"); mActivity.onButtonClick(mButtonAngle); assertList.add(new AssertPair("1.4142136∠5.4977871",mAnswerText.getText())); mActivity.onButtonClick(mButtonDegree); assertList.add(new AssertPair("1.4142136∠315°",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);
清空Cookie -
联系我们 -
51Testing软件测试网 -
交流论坛 -
空间列表 -
站点存档 -
升级自己的空间
Powered by 51Testing
© 2003-2021
|