F08(?): Feil & testing!

Men først: AutoComplete

AutoCompleteTextView

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent">

    <AutoCompleteTextView
        android:id="@+id/countryAutoCompleteTextView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Enter a country">
    </AutoCompleteTextView>
</LinearLayout>

Autocomplete-adapter

AutoCompleteTextView countryAutoCompleteTextView = (AutoCompleteTextView)
        findViewById(R.id.countryAutoCompleteTextView);

final String[] countries = {
        "Norway",
        "Norfolk",
        "Ananas",
        "Andorra",
};

final ArrayAdapter<String> countriesAdapter = new ArrayAdapter<String>(
        this, android.R.layout.simple_list_item_1, countries);

countryAutoCompleteTextView.setAdapter(countriesAdapter);

Nøyaktig det samme som ListView

R.array.X

Teit med data i Java-koden(?)

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="countries">
        <item>Andorra</item>
        <item>United Arab Emirates</item>
        <item>Afghanistan</item>
    </string-array>
</resources>
final String[] countries = getResources().getStringArray(R.array.countries);
final String[] countries = {
        "Norway",
        "Norfolk",
        "Ananas",
        "Andorra",
};

Default ordering: samme rekkefølge som i arrayet

Other stuff

  • completionThreshold
  • <request-focus>

Demo
Time
Yay

Unntak(shåndtering)

  • Ting kan treffe vifta
     
  • Én tråd: UI
     
  • Én exception = crash
     
  • Bad reputation

Løsninger

ANR

 

  • Threads!
     
  • AsyncTask

"Has stopped"

 

  • Try
     
  • Catch
     
  • Finally

 

LOGG & si fra til bruker!

Testing!

Flere strategier

  • Black box
  • White box
  • Unit (enhetstesting)
  • Integrasjonstesting
  • Systemtesting
  • +++

 

TDD (Test Driven Development)

Back to basics: JUnit (3!)

// given
Calculator calculator = new Calculator();

// when
int result = calculator.add(2, 3);

// then
assertEquals(5, result);
public class CalculatorTestCase extends TestCase
{
    private Calculator calculator;

    @Override
    public void setUp()
    {
        calculator = new Calculator();
    }

    // ...
}

setUp() & tearDown()

  • setUp: før hver test
     
  • tearDown: etter hver test
     
  • Åpne/lukke nettverkstilkobling?

Tester

  • Begynner med "test", eks:
    • testOnePlusOneEqualsTwo()
       
  • Ingen andre metoder er tester
     
  • Endret/penere i JUnit 4 (ikke Android)

Assert.*

Standard JUnit
 

  • assertNull / assertNotNull
  • assertTrue / assertFalse
  • assertSame / assertNotSame (reference)
  • assertEquals (value)

 

assert?

Eksempel: Calculator

package no.westerdals.autocomplete_demo;

import junit.framework.TestCase;

public class CalculatorTestCase extends TestCase
{
    private Calculator calculator;

    @Override
    public void setUp()
    {
        calculator = new Calculator();
    }

    public void testAddition()
    {
        int a = 2, b = 3;
        int expected = 5;

        int actual = calculator.add(2, 3);

        assertEquals(a + " + " + b + " should equal " + expected, expected, actual);
    }
}

Ideer til testing

Orientation!

 

Config

  • System language
  • Keyboard availability

 

Battery life

 

External resources

Testing i Android

  • Bygger på JUnit
     
  • Ekstra Android-spesifikke API-er og tjenester
     
  • Testene kjører på device (eller i emulator)
    • Endret de siste tre ukene
       
  • Eget test-prosjekt (også endret)

Overblikk

Demo

Time

Yay

Exists!

 

Take focus

 

Intent payload

Øving

Kristine!

PG4600-08: Feil og testing!

By theneva

PG4600-08: Feil og testing!

  • 601