Home
Explore
Submit Search
Upload
Login
Signup
Advertisement
Check these out next
Android testing part i
Kan-Han (John) Lu
Inside Android Testing
Fernando Cejas
Robotium - sampath
Sampath Muddineni
Android Native Apps Development
Intel Software Brasil
Dagger for android
Kan-Han (John) Lu
Discovering Flaws in Security-Focused Static Analysis Tools for Android using...
Kevin Moran
Android Testing: An Overview
SmartLogic
Appium Mobile Testing: Nakov at BurgasConf - July 2021
Svetlin Nakov
1
of
64
Top clipped slide
Testing on Android
Dec. 3, 2009
•
0 likes
71 likes
×
Be the first to like this
Show More
•
11,909 views
views
×
Total views
0
On Slideshare
0
From embeds
0
Number of embeds
0
Download Now
Download to read offline
Report
Technology
Droidcon London 2009
Diego Torres Milano
Follow
Advertisement
Advertisement
Advertisement
Recommended
Introduction to android testing
Diego Torres Milano
22K views
•
197 slides
Android testing
Bitbar
7.4K views
•
19 slides
Robotium Tutorial
Mobile March
22.4K views
•
34 slides
A guide to Android automated testing
jotaemepereira
738 views
•
73 slides
Android testing
JinaTm
3.5K views
•
34 slides
2012 mobile testingsummit-moet
Eing Ong
491 views
•
19 slides
More Related Content
Slideshows for you
(20)
Android testing part i
Kan-Han (John) Lu
•
408 views
Inside Android Testing
Fernando Cejas
•
1.7K views
Robotium - sampath
Sampath Muddineni
•
671 views
Android Native Apps Development
Intel Software Brasil
•
1.8K views
Dagger for android
Kan-Han (John) Lu
•
416 views
Discovering Flaws in Security-Focused Static Analysis Tools for Android using...
Kevin Moran
•
268 views
Android Testing: An Overview
SmartLogic
•
3.4K views
Appium Mobile Testing: Nakov at BurgasConf - July 2021
Svetlin Nakov
•
130 views
Y1 gd engine_terminology amy brockbank
amybrockbank
•
733 views
Lewis brady engine_terminology (edited version)
LewisB2013
•
210 views
SynapseIndia mobile apps deployment framework architecture
Synapseindiappsdevelopment
•
318 views
iain goodyear game engines definitions woprks 2 cristian galliano
crisgalliano
•
444 views
Y1 gd engine_terminology (2)
crisgalliano
•
526 views
Ensuring code quality
MikhailVladimirov
•
2.1K views
MOET: Mobile End-to-End Testing
mobiletestsummit
•
2.1K views
Code and Conquer with Globe Labs, October 27, 2012
jobandesther
•
880 views
Android tutorial
Alberto Jr Gaudicos
•
656 views
xUnit and TDD: Why and How in Enterprise Software, August 2012
Justin Gordon
•
2.7K views
Introduction to Android Window System
National Cheng Kung University
•
5.3K views
Android Test Automation Workshop
Eduardo Carrara de Araujo
•
1.2K views
Viewers also liked
(20)
Android Building, Testing and reversing
Enrique López Mañas
•
1.6K views
Unit testing and Android
Tomáš Kypta
•
1.8K views
Android Automation Testing with Selendroid
Vikas Thange
•
4.6K views
How to setup unit testing in Android Studio
tobiaspreuss
•
64.4K views
Performance testing of mobile apps
vodQA
•
22.1K views
Mobile testing: Android, iOS, BlackBerry
QA Club Kiev
•
2.6K views
Txt Introduction
Logic Solutions, Inc.
•
5.5K views
Data Storage In Android
Aakash Ugale
•
5K views
QA Fest 2016. Денис Яременко. Как облегчить процесс мобильного тестирования
QAFest
•
1.5K views
Introduction to Trusted Computing
Maksim Djackov
•
2.6K views
Android UI Testing with uiautomator
Jana Moudrá
•
4.2K views
Android complete basic Guide
AKASH SINGH
•
3.1K views
Android Data Persistence
Jussi Pohjolainen
•
9.3K views
Android Training (Storing & Shared Preferences)
Khaled Anaqwa
•
1.7K views
Android Training (Content Provider)
Khaled Anaqwa
•
1.2K views
Day 4: Android: UI Widgets
Ahsanul Karim
•
2.8K views
Testing for Android: When, Where, and How to Successfully Use Test Automation
Trent Peterson
•
1.1K views
Introduction to android testing - oscon 2012
OSCON Byrum
•
10.6K views
Unit Testing Android Applications
Rody Middelkoop
•
1.1K views
Android Performance Tips & Tricks
Sergii Zhuk
•
1.3K views
Advertisement
Similar to Testing on Android
(20)
Android Development Tutorial V3
Diego Torres Milano
•
11.1K views
TenKod EZ TestApp Mobile Application Testing Introduction
Asaf Saar
•
593 views
Aandroid coding convention and quality assurance plugin
Duy Tan Geek
•
360 views
Good code-isnt-enough
Skills Matter
•
562 views
20110507 Implementing Continuous Deployment
XebiaLabs
•
583 views
DevSecOps: The DoD Software Factory
scoopnewsgroup
•
3.8K views
X Means Y
CommonsWare
•
815 views
Eclipse Che - A Revolutionary IDE for Distributed & Mainframe Development
DevOps.com
•
796 views
Challenges and solutions for mobile application testing and continuous integr...
Asaf Saar
•
996 views
Demo Slides: Application Release Automation with Deployit
XebiaLabs
•
826 views
SDLC
Chandan Pandit
•
1.9K views
Tdd & clean code
Eyal Vardi
•
2K views
MvvmCross Introduction
Stuart Lodge
•
1.2K views
MvvmCross Seminar
Xamarin
•
13.6K views
Ravindra Prasad
Ravindra Prasad
•
394 views
Agile Days Twin Cities 2011
Brian Repko
•
1.3K views
[AnDevCon 2016] Mutation Testing for Android
Hazem Saleh
•
6.9K views
JDXA, The KISS ORM for Android
Damodar Periwal
•
1.5K views
Android Development Workshop
Peter Robinett
•
14.9K views
TechDays 2013 Juhani Lind: Acceptance Test Driven Development With VS 2012
Tieturi Oy
•
784 views
Recently uploaded
(20)
Nanotechnology.pdf
shikharbhadouria
•
5 views
RC522 RFID Reader_Write For Arduino.pdf
RoboDJ
•
0 views
【本科生、研究生】英国卡迪夫大学毕业证文凭购买指南
sutseu
•
0 views
NS-CUK Joint Jouarl Club: JHLee, Review on "GraphMAE: Self-Supervised Masked...
ssuser4b1f48
•
0 views
pdf.pdf
YenenehMulat
•
0 views
CyberEthics.ppt
ANKITKUMAR920995
•
2 views
proposal (2).pdf
mennaHendy
•
3 views
SEKISUI - RFID Journal Live - May 2023.pdf
Rich Rogers
•
8 views
Networking Hardware Requirements.pptx
JhamaikaPaet
•
1 view
NS-CUK Seminar: V.T.Hoang, Review on "Graph Clustering with Graph Neural Netw...
ssuser4b1f48
•
0 views
Email Signature.pdf
mennaHendy
•
3 views
Our Business Goals.pdf
mennaHendy
•
4 views
如何办理一份高仿东伦敦大学毕业证成绩单?
aazepp
•
3 views
【本科生、研究生】美国德鲁大学毕业证文凭购买指南
sutseu
•
0 views
Will AI take over our jobs .pptx
Alfredo Mancera
•
11 views
Do Reinvent the Wheel - Nov 2021 - DigiNext.pdf
Hamidreza Soleimani
•
0 views
Introduction to Virtualization.pptx
latifdhalait
•
0 views
Digital Marketing Plan.pdf
mennaHendy
•
4 views
Spring_Boot_Microservices-5_Day_Session.pptx
Prabhakaran Ravichandran
•
0 views
Office 365 licenses
Princy Nadar
•
0 views
Advertisement
Testing on Android
droidcon 2009 testing on android
london, december 2009 diego torres milano diego@codtech.com copyright © 2009 cod technologies ltd www.codtech.com
“Never test the depth of the water with both feet.”
Anonymous copyright © 2009 cod technologies ltd www.codtech.com
agenda ●
test driven development ● behavior driven development ● building blocks ● your first tdd android application ● writing tests copyright © 2009 cod technologies ltd www.codtech.com
resources ●
http://android.codtech.com/droidcon2009 copyright © 2009 cod technologies ltd www.codtech.com
after this section you will after this section you will...
● understand test driven development ● be introduced to behavior driven development ● recognize test building blocks copyright © 2009 cod technologies ltd www.codtech.com
what is test driven development ?
TDD is the strategy of starting the development process by the test cases and then provide the software that satisfies these tests copyright © 2009 cod technologies ltd www.codtech.com
test driven development
uml activity diagram copyright © 2009 cod technologies ltd www.codtech.com
kinds of automated tests ●
unit tests – written by programmers – for programmers – in a programming language ● functional or acceptance tests – written by business people and QA – for business people – in a high level language check FitNesse www.fitnesse.org copyright © 2009 cod technologies ltd www.codtech.com
behavior driven development ●
evolution in the thinking behind TDD ● common vocabulary between business and technology ● framework of activity based on three principles – business and technology should refer to the same system in the same way – any system should have an identified, verifiable value to the business – upfront analysis, design and planning all have a diminishing return http://behaviourdriven.org http://jbehave.org copyright © 2009 cod technologies ltd www.codtech.com
scenario ●
text scenario Given I am not logged in When I log in as Liz with a password JBehaver Then I should see a message, "Welcome, Liz!" ● defining steps @Given("I am not logged in") public void logOut() { currentPage.click("logout"); } copyright © 2009 cod technologies ltd www.codtech.com
testing on android ●
android platform integrates a testing framework ● it's based on Junit 3 ● supports – unit tests – functional tests – activity tests – mock objects – utilities to simplify test Portions of this page are reproduced from work created and shared by Google and used according to terms described in the Creative creation Commons 2.5 Attribution License. copyright © 2009 cod technologies ltd www.codtech.com
is this all the documentation ?
a framework for writing android test cases and suites. (?) copyright © 2009 cod technologies ltd www.codtech.com
ActivityInstrumentationTestCase2 ●
functional testing of single Activity ● Activity created used system infrastructure ● Activity can be manipulated ● Tests can be annotated with @UiThreadTest ● Intents can be injected with setActivityIntent() ● sendKeys() can be used to simulate user interaction copyright © 2009 cod technologies ltd www.codtech.com
uml class diagram
copyright © 2009 cod technologies ltd www.codtech.com
ApplicationTestCase ●
test Application in controlled environment ● basic lyfecycle support – onCreate() called after createApplication() – tearDown() calls onDestroy() ● mock Context can be injected ● Application can be terminated with terminateApplication() copyright © 2009 cod technologies ltd www.codtech.com
ActivityUnitTestCase ●
isolated testing of a single Activity ● Activity created with minimal connection to the system ● mocked dependencies can be injected ● Activity will not participate in the normal interactions with the system ● some methods should be avoided and will throw exceptions if called copyright © 2009 cod technologies ltd www.codtech.com
ProviderTestCase2<T> ●
isolated testing of a ContentProvider ● uses a MockContentResolver to – access the provider – restricts access to filesystem (db & files) – injects IsolatedContext ● environment managed by setUp() and tearDown() copyright © 2009 cod technologies ltd www.codtech.com
ServiceTestCase<T> ●
framework to test Services ● basic support for lifecycle – onCreate() called after startService(Intent) or bindService(Intent) – depending on how was started tearDown() calls appropriate method ● mock objects can be injected by – setApplication() – setContext() copyright © 2009 cod technologies ltd www.codtech.com
AndroidTestCase ●
base class that can be extended to support different requirements ● use this if you need – isolate components – test custom Views – test permissions – access Resources copyright © 2009 cod technologies ltd www.codtech.com
ViewAsserts ●
useful assertions about Views – Views are aligned in several ways – ViewGroups contain Views – View is on screen – View has specific screen coordinates copyright © 2009 cod technologies ltd www.codtech.com
TouchUtils ●
use these methods to generate touch events ● clickView() to simulate touching ● drag...() to touch and drag ● longClick() for touching and holding ● scroll...() to simulate different scrolling ● tapView() to touch and release quickly copyright © 2009 cod technologies ltd www.codtech.com
android.test.mock all classes has nonfunctional methods ●
MockApplication ● MockContentResolver ● MockContext ● MockDialogInterface ● MockPackageManager ● MockResources copyright © 2009 cod technologies ltd www.codtech.com
“You know you've achieved perfection in design, not when you have nothing more to add, but when you have nothing more to take away.”
Antoine de SaintExupery copyright © 2009 cod technologies ltd www.codtech.com
after this section you will after this section you will...
● be able to create a project and its corresponding tests project ● apply test driven development techniques ● get acquainted with android tests copyright © 2009 cod technologies ltd www.codtech.com
design
converts temperatures from celsius e r us to e n th whehrenheit a d an if the fa rsa err re' e- e t vicen vers one or s a nd atur e in dis pla sh o uld temper ther is (O ) ye d be e o he ld th re fie ed updat lly m atica auto we l eave f or s p ac keyb e o ar d copyright © 2009 cod technologies ltd www.codtech.com
create project
Choose the build target copyright © 2009 cod technologies ltd www.codtech.com
create test project always create a
test project other values are automatically selected copyright © 2009 cod technologies ltd www.codtech.com
create test case
to create the test for the Activity we use ActivityInstrument ationTestCase2<T> create method stubs the Activity as the class under test copyright © 2009 cod technologies ltd www.codtech.com
check generated test case /**
* Copyright © 2009 COD Technologies Ltd. All rights reserved. */ package com.codtech.android.training.tctdd1.test; import android.test.ActivityInstrumentationTestCase2; import adjust stub com.codtech.android.training.tctdd1.TemperatureConverterActivity; constructor to pass required arguments public class to super TemperatureConverterActivityTests extends ActivityInstrumentationTestCase2<TemperatureConverterActivity> { /** * @param name */ public TemperatureConverterActivityTests(String name) { super("com.codtech.android.training.tctdd1", TemperatureConverterActivity.class); setName(name); } // setUp() and tearDown() not showed } copyright © 2009 cod technologies ltd www.codtech.com
setUp /* (non-Javadoc) *
@see android.test.ActivityInstrumentationTestCase2#setUp() */ these constants are protected void setUp() throws Exception { not yet created, we super.setUp(); need to add the Views and Ids to the final TemperatureConverterActivity activity = getActivity(); layout celsius = (EditText)activity.findViewById( com.codtech.android.training.tctdd1.R.id.celsius); fahrenheit = (EditText)activity.findViewById( com.codtech.android.training.tctdd1.R.id.fahrenheit); } create fields when necessary copyright © 2009 cod technologies ltd www.codtech.com
layout
Ids should satisfy previous requirements copyright © 2009 cod technologies ltd www.codtech.com
add some UI tests @SmallTest public void testSimpleCreate()
{ assertNotNull(getActivity()); assertNotNull(celsius); assertNotNull(fahrenheit); ViewAsserts.assertOnScreen(fahrenheit.getRootView(), celsius); ViewAsserts.assertOnScreen(celsius.getRootView(), fahrenheit); } @SmallTest public void testAlignment() { ViewAsserts.assertRightAligned(celsius, fahrenheit); ViewAsserts.assertLeftAligned(celsius, fahrenheit); } @SmallTest public void testFiledsStartEmpty() { assertTrue("Celsius field starts not empty", "".equals(celsius.getText().toString())); assertTrue("Fahrenheit field starts not empty", "".equals(fahrenheit.getText().toString())); } copyright © 2009 cod technologies ltd www.codtech.com
now some functional tests
we run the test in the UI thread @UiThreadTest public void testFahrenheitToCelsiusConversion() { we don't have a celsius.clear(); class implementing fahrenheit.clear(); setNumber(), getNumber() and final double f = 32.5; clear() so we will be creating it soon fahrenheit.requestFocus(); fahrenheit.setNumber(f); celsius.requestFocus(); final double c = TemperatureConverter.fahrenheitToCelsius(f); final double cr = celsius.getNumber(); final double delta = Math.abs(c - cr); final String msg = "" + f + "F should be " + c + "C but was " + cr + " (delta " + delta + ")"; assertTrue(msg, delta < 0.005); } we don't have a TemperatureConverter either copyright © 2009 cod technologies ltd www.codtech.com
and more tests
don't run this test in UI thread @SmallTest public void testCelsiusToFahrenheitConversion() { final double c = -105.35; TouchUtils.tapView(this, celsius); create method stub in sendKeys("MINUS 1 0 5 PERIOD 3 5"); TemperatureConverter final double cr = celsius.getNumber(); assertEquals("Send keys should have set " + c + " but set " + cr, c, cr); final double f = TemperatureConverter.celsiusToFahrenheit(c); final double fr = fahrenheit.getNumber(); final double delta = Math.abs(f - fr); final String msg = "" + c + "C should be " + f + "F but was " + fr + " (delta " + delta + ")"; assertTrue(msg, delta < 0.005); } copyright © 2009 cod technologies ltd www.codtech.com
create EditNumber class
create a new package for views extend EditText once we create EditNumber we should refactor our main layout and fields copyright © 2009 cod technologies ltd www.codtech.com
create TemperatureConverter class
copyright © 2009 cod technologies ltd www.codtech.com
create a TestCase
create stubs test TemperatureConverter copyright © 2009 cod technologies ltd www.codtech.com
select methods to test
copyright © 2009 cod technologies ltd www.codtech.com
complete actual tests public void testFahrenheitToCelsius()
{ for (double c: conversionTableDouble.keySet()) { final double f = conversionTableDouble.get(c); final double cr = TemperatureConverter.fahrenheitToCelsius(f); final double delta = Math.abs(c - cr); final String msg = "" + f + "F should be " + c + "C but is " + cr + " (delta " + delta + ")"; assertTrue(msg, delta < 0.0001); } } public void testCelsiusToFahrenheit() { for (double c: conversionTableDouble.keySet()) { final double f = conversionTableDouble.get(c); final double fr = TemperatureConverter.celsiusToFahrenheit(c); final double delta = Math.abs(f - fr); final String msg = "" + c + "C should be " + f + "F but is " + fr + " (delta " + delta + ")" ; assertTrue(msg, delta < 0.0001); } } copyright © 2009 cod technologies ltd www.codtech.com
test exceptions public void testAbsoluteZeroCelsius()
{ Exception e = null; try { TemperatureConverter.celsiusToFahrenheit(-274); } catch (RuntimeException re) { } assertNotNull("Absolute zero C not detected", e); } public void testAbsoluteZeroFahrenheit() { Exception e = null; try { TemperatureConverter.fahrenheitToCelsius(-460); } catch (RuntimeException re) { e = re; } assertNotNull("Absolute zero F not detected", e); } copyright © 2009 cod technologies ltd www.codtech.com
conversion table ●
simple conversion table to run several tests private static final HashMap<Double, Double> conversionTableDouble = new HashMap<Double, Double>(); static { // initialize (c, f) pairs conversionTableDouble.put(0.0, 32.0); conversionTableDouble.put(100.0, 212.0); conversionTableDouble.put(-1.0, 30.20); conversionTableDouble.put(-100.0, -148.0); conversionTableDouble.put(32.0, 89.60); conversionTableDouble.put(-40.0, -40.0); conversionTableDouble.put(-273.0, -459.40); } copyright © 2009 cod technologies ltd www.codtech.com
run tests
conversion tests fail because we haven't implemented it yet copyright © 2009 cod technologies ltd www.codtech.com
TemperatureConverter package com.codtech.android.training.tctdd1; public class
TemperatureConverter { public static final double ABSOLUTE_ZERO_C = -273.0d; public static final double ABSOLUTE_ZERO_F = -459.4d; private static final String ERROR_MESSAGE_BELOW_ZERO_FMT = "Invalid temperature: %.2f%c below absolute zero"; public static double celsiusToFahrenheit(double c) { if (c < ABSOLUTE_ZERO_C) { throw new RuntimeException( String.format(ERROR_MESSAGE_BELOW_ZERO_FMT, c, 'C')); } return (c * 1.8d + 32); } public static double fahrenheitToCelsius(double f) { if (f < ABSOLUTE_ZERO_F) { throw new RuntimeException( String.format(ERROR_MESSAGE_BELOW_ZERO_FMT, f, 'F')); } return ((f - 32) / 1.8d); } } copyright © 2009 cod technologies ltd www.codtech.com
run tests
tests fail now because we are doing the conversion right but we are invoking conversion tests empty methods in succeded EditNumber that don't update the ui copyright © 2009 cod technologies ltd www.codtech.com
implement EditNumber methods package com.codtech.android.training.tctdd1.view; import android.content.Context; import
android.util.AttributeSet; import android.widget.EditText; public class EditNumber extends EditText { public EditNumber(Context context) { super(context); } public EditNumber(Context context, AttributeSet attrs) { super(context, attrs); } convenience methods delegating to EditText public void clear() { setText(""); } public void setNumber(double f) { setText(Double.toString(f)); } public double getNumber() { return Double.valueOf(getText().toString()); } } copyright © 2009 cod technologies ltd www.codtech.com
run tests
a NumberFormatException because we are not changing the other field when some new temperature is entered and thus the field is empty copyright © 2009 cod technologies ltd www.codtech.com
onCreate /**
Called when the activity is first created. */ @SuppressWarnings("unchecked") @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); add change listener celsius = (EditNumber)findViewById(R.id.celsius); to these fields fahrenheit = (EditNumber)findViewById(R.id.fahrenheit); try { Class[] args = new Class[] { double.class }; celsius.addTextChangedListener( new TemperatureChangedWatcher(fahrenheit, TemperatureConverter.class.getMethod( "celsiusToFahrenheit", args))); fahrenheit.addTextChangedListener( new TemperatureChangedWatcher(celsius, TemperatureConverter.class.getMethod( "fahrenheitToCelsius", args))); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } copyright © 2009 cod technologies ltd www.codtech.com
TemperatureChangedWatcher private static class
TemperatureChangedWatcher implements TextWatcher { private EditNumber dest; private Method convert; public TemperatureChangedWatcher(EditNumber dest, Method convert) { this.dest = dest; this.convert = convert; } @Override public void afterTextChanged(Editable s) { } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { if (!dest.hasWindowFocus() || dest.hasFocus() || s == null ) { return; } // continued ... copyright © 2009 cod technologies ltd www.codtech.com
TemperatureChangedWatcher
final String ss = s.toString(); if ( "".equals(ss) ) { dest.clear(); return; } try { final double result = (Double) convert.invoke(TemperatureConverter.class, Double.parseDouble(ss)); // display only 2 decimals dest.setNumber(Math.rint(result*100)/100); } catch (NumberFormatException e) { // WARNING // this is generated while a number is entered, // for example just a -' so we don't want to show the error } catch (Exception e) { dest.setError(e.getCause().getLocalizedMessage()); } } } copyright © 2009 cod technologies ltd www.codtech.com
tests succeed
copyright © 2009 cod technologies ltd www.codtech.com
temperature converter
converts temperatures from celsius e r us to e n th whehrenheit a d an if the fa rsa err re' e- e t vicen vers one or s a nd atur e in dis pla sh o uld temper ther is (O ) ye d be e o he ld th re fie ed updat lly m atica auto we l eave f or s p ac keyb e o ar d copyright © 2009 cod technologies ltd www.codtech.com
instrumentation ●
Dev Tools → Instrumentation → TCTDD1 Tests copyright © 2009 cod technologies ltd www.codtech.com
eclipse ●
TCTDD1Test → Run As → Android JUnit Test copyright © 2009 cod technologies ltd www.codtech.com
command line diego@bruce:~$ adb
-e shell am instrument -w -e class com.codtech.android.training.tctdd1.test.TemperatureCo nverterActivityTests com.codtech.android.training.tctdd1.test/android.test. InstrumentationTestRunner com.codtech.android.training.tctdd1.test.TemperatureCo nverterActivityTests:..... Test results for InstrumentationTestRunner=..... Time: 5.564 OK (5 tests) copyright © 2009 cod technologies ltd www.codtech.com
EditNumberTests
AndroidTestCase copyright © 2009 cod technologies ltd www.codtech.com
select methods to test
copyright © 2009 cod technologies ltd www.codtech.com
constructor and setUp /** * @param
name */ public EditNumberTests(String name) { super(); setName(name); } creating a mock context /* (non-Javadoc) * @see android.test.AndroidTestCase#setUp() */ protected void setUp() throws Exception { super.setUp(); mockContext = new IsolatedContext(new MockContentResolver(), getContext()); editNumber = new EditNumber(mockContext); editNumber.setFocusable(true); } copyright © 2009 cod technologies ltd www.codtech.com
complete actual tests /** * Test
method for EditNumber#EditNumber(android.content.Context) */ public void testEditNumberContext() { assertNotNull(new EditNumber(mockContext)); } /** * Test method for EditNumber#EditNumber(Context, AttributeSet) */ public void testEditNumberContextAttributeSet() { // TODO // use a real AttributeSet for this test not null assertNotNull(new EditNumber(mockContext, null)); } /** * Test method for EditNumber#clear() */ public void testClear() { editNumber.setText("1234"); editNumber.clear(); assertEquals("editNumber should have been cleared", "", editNumber.getText().toString()); } copyright © 2009 cod technologies ltd www.codtech.com
complete actual tests public void testSetNumber()
{ final double d = 1.23d; editNumber.setNumber(d); final double dr = editNumber.getNumber(); final String msg = "editNumber should be " + d + " but is " + dr; assertEquals(msg, d, dr); } public void testGetNumber() { final double d = 0.98d; final String ds = Double.toString(d); editNumber.setText(ds); final double dr = editNumber.getNumber(); final String msg = "editNumber should be " + ds + " but is " + dr; assertEquals(msg, d, dr); } copyright © 2009 cod technologies ltd www.codtech.com
input test public class TemperatureConverterActivityTests
extends ActivityInstrumentationTestCase2<TemperatureConverterActivity> { // … @SmallTest public void testInputFilter() { TouchUtils.tapView(this, celsius); final Double n = -1.234d; sendKeys("MINUS 1 PERIOD 2 PERIOD 3 PERIOD 4"); Object nr = null; try { nr = celsius.getNumber(); } catch (NumberFormatException e) { nr = celsius.getText(); } final String msg = "-1.2.3.4 should be filtered to " + n + " but is " + nr; assertEquals(msg, n, nr); } } copyright © 2009 cod technologies ltd www.codtech.com
input filter public class EditNumber
extends EditText { // … invoke init() from constructors /** * Initialization. * Set filter. * */ private void init() { // DigistKeyListener.getInstance(true, true) returns an // instance that accepts digits, sign and decimal point final InputFilter[] filters = new InputFilter[] { DigitsKeyListener.getInstance(true, true) }; setFilters(filters); } } copyright © 2009 cod technologies ltd www.codtech.com
resources ●
http://dtmilano.blogspot.com ● http://easymock.org ● http://code.google.com/p/hamcrest (matchers) ● http://mockito.org/ ● http://developer.android.com/guide/developing/t ools/monkey.html (ui exerciser) ● http://ricston.com/ricstontrainingforandroid/ ● http://android.codtech.com copyright © 2009 cod technologies ltd www.codtech.com
“If things seem under control, you're not going fast enough.”
Mario Andretti copyright © 2009 cod technologies ltd www.codtech.com
thank you testing on android
london, december 2009 diego torres milano diego@codtech.com copyright © 2009 cod technologies ltd www.codtech.com
Advertisement