TDD für iphone OS. xpdays 2009. Tammo Freese



Ähnliche Dokumente
Java Entwicklung für Embedded Devices Best & Worst Practices!

Xcode/Cocoa/Objective-C Crashkurs Programmieren unter Mac OS X

AK Medientechnologien Hello World. Josef Kolbitsch

Albert HAYR Linux, IT and Open Source Expert and Solution Architect. Open Source professionell einsetzen

AK Medientechnologien 05 Delegation

1. Einschränkung für Mac-User ohne Office Dokumente hochladen, teilen und bearbeiten

Übungen zur Softwaretechnik

Softwaretests in Visual Studio 2010 Ultimate Vergleich mit Java-Testwerkzeugen. Alexander Schunk Marcel Teuber Henry Trobisch

Was meinen die Leute eigentlich mit: Grexit?

Apple Train the Trainer 10 App Store Submission. Josef Kolbitsch

Ist Fernsehen schädlich für die eigene Meinung oder fördert es unabhängig zu denken?

Fortgeschrittenes Programmieren mit Java. Test Driven Development

1 Was ist das Mediencenter?

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER

Netzwerkeinstellungen unter Mac OS X

AK Medientechnologien 09 App Store Submission. Josef Kolbitsch

Formwerk AG. Die Sicherstellung konsistenter Nutzungserlebnisse über den gesamten SW-Produktlebenszyklus durch Human Centered Design.

Digital signierte Rechnungen mit ProSaldo.net

SCHNELLEINSTIEG ZUM TOOL NODEBUILDER

Mocha. Ein Ruby Mocking und Stubbing Framework. von Thilo Utke. Werd ich drüber reden Erst was zu mit.

ARAkoll 2013 Dokumentation. Datum:

Korrekturen von Hand ausgeführt, per Post oder als Scan an Sie übermittelt.

Wie man Registrationen und Styles von Style/Registration Floppy Disketten auf die TYROS-Festplatte kopieren kann.

Reporting Services und SharePoint 2010 Teil 1

Eine Anwendung mit InstantRails 1.7

Die Wasser App.

Tammo Freese Freiberuflicher Softwareentwickler. CoreBluetooth ios kommunikativ

Vermeiden Sie es sich bei einer deutlich erfahreneren Person "dranzuhängen", Sie sind persönlich verantwortlich für Ihren Lernerfolg.

Icon-Grafiken für iphone/ipad-apps

INHALT 1. INSTALLATION DES V-MODELL XT UNTER WINDOWS 7 2. INSTALLATION DES V-MODELL XT UNTER WINDOWS VISTA

8. Bintec Router Redundancy Protocol (BRRP) 8.1 Einleitung

Fax einrichten auf Windows XP-PC

IVE-W530BT. Bluetooth Software Update Manual mit Android Telefonen

Arbeiten mit UMLed und Delphi

Nur ein paar Schritte zum ebook...

AK Medientechnologien 08 App Deployment. Josef Kolbitsch

Kostenstellen verwalten. Tipps & Tricks

Die Post hat eine Umfrage gemacht

Apple Train the Trainer 08 Developer Programs. Josef Kolbitsch

Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.

Daten fu r Navigator Mobile (ipad)

2. Konfiguration der Adobe Software für die Überprüfung von digitalen Unterschriften

Objektorientierte Programmierung für Anfänger am Beispiel PHP

OUTLOOK-DATEN SICHERN

Ihren Kundendienst effektiver machen

iphone app - Anwesenheit

ways2gether ipad App Guide

HINWEISE ZUR ARBEIT IM LABOR

SUB-ID- VERWALTUNG MIT GPP SETUP-GUIDE FÜR PUBLISHER

Barcode Master. Barcode Generator für PC Windows und MAC OS. Bedienungsanleitung und Handbuch. Version 1.1. Dr.J.Willrodt /

Grundlagen von Python

COMPUTERIA VOM Wenn man seine Termine am Computer verwaltet hat dies gegenüber einer Agenda oder einem Wandkalender mehrere Vorteile.

Praktische Übung 'JUnit-Test'

Einrichtung des Cisco VPN Clients (IPSEC) in Windows7

Expertenumfrage: Mobile Applications

Windows Explorer Das unbekannte Tool. Compi-Treff vom 19. September 2014 Thomas Sigg

Leitfaden E-Books Apple. CORA E-Books im ibook Store kaufen. Liebe Leserinnen und Leser, vielen Dank für Ihr Interesse an unseren CORA E-Books.

MailUtilities: Remote Deployment - Einführung

1 Belastung. 1.1 Standortbestimmung 1.2 Belastungsvorhersage 1.3 Favoriten

objectif Import von Excel-Daten Bei Fragen nutzen Sie bitte unseren Support: Telefon: +49 (30)

Wie schafft man eine optimale Multiscreen-Experience?

O RGAKO M : Was ist Twitter?

Das sogenannte Beamen ist auch in EEP möglich ohne das Zusatzprogramm Beamer. Zwar etwas umständlicher aber es funktioniert

Installation von NetBeans inkl. Glassfish Anwendungs-Server

Hilfen zur Verwendung der Word-Dokumentvorlage des BIS-Verlags

Beweisbar sichere Verschlüsselung

H a c k i n t o s h T u t o r i a l O S X Y o s e m i t e

NAS 159 Time Machine Best Practice

Guide DynDNS und Portforwarding

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

1 Einleitung. Lernziele. automatische Antworten bei Abwesenheit senden. Einstellungen für automatische Antworten Lerndauer. 4 Minuten.

icloud nicht neu, aber doch irgendwie anders

eduvote Ein Umfragesystem für Lehrveranstaltungen - PowerPoint Add-In -

Geben Sie in dem offenen Suchfeld den Namen Ihrer Einrichtung ein und klicken Sie auf Suchen.

Sichere Netlog-Einstellungen

Kapitel 2: Die edle Hardware

BMW ConnectedDrive. connecteddrive. Freude am Fahren BMW CONNECTED DRIVE. NEUERUNGEN FÜR PERSONALISIERTE BMW CONNECTED DRIVE DIENSTE.

FritzCall.CoCPit Schnelleinrichtung

NEUES AUS DER ENTWICKLUNG. April 2015

PayPal PLUS für Shopware

Mobile-Szenario in der Integrationskomponente einrichten

Kaufkräftige Zielgruppen gewinnen

Clients in einer Windows Domäne für WSUS konfigurieren

Deutliche Mehrheit der Bevölkerung für aktive Sterbehilfe

Präsentation zur Vorstellung meiner Bachelor-Arbeit beim BSE- Seminar. Vortrag von Patrick Bitterling

Unsere Produkte. Wir automatisieren Ihren Waren- und Informationsfluss. Wir unterstützen Ihren Verkaufsaußendienst.

Meldung Lokale Anwendung inkompatibel oder Microsoft Silverlight ist nicht aktuell bei Anmeldung an lokal gespeicherter RWE SmartHome Anwendung

Online-Bestellung Tageskarten für Mitglieder des FC St. Pauli, die nicht im Besitz einer Dauer- oder Saisonkarte sind.

Ein Spiel für 2-3 goldhungrige Spieler ab 8 Jahren.

Downloadfehler in DEHSt-VPSMail. Workaround zum Umgang mit einem Downloadfehler

1. Der Router ist nicht erreichbar Lösungsansatz: IP Adresse des Routers überprüfen ( entweder irgendwo auf dem Gerät aufgeklebt oder im Handbuch )

ROFIN App Benutzerhandbuch. Version 1.0

Serienbrieferstellung in Word mit Kunden-Datenimport aus Excel

INSTALLATION DES V-MODELL XT UNTER WINDOWS VISTA

Test mit lokaler XAMPP Oxid Installation

Programmieren einer Lüftungsanlage mit DDC-Suite Vorlagen Arbeiten mit dem Fupla

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 22

Version 1.0 [Wiederherstellung der Active Directory] Stand: Professionelle Datensicherung mit SafeUndSave.com. Beschreibung.

Universität Zürich Informatikdienste. SpamAssassin. Spam Assassin Go Koordinatorenmeeting 27. April

Version 0.3. Installation von MinGW und Eclipse CDT

Transkript:

TDD für iphone OS xpdays 2009 Tammo Freese

Inhalt Unit Testing für iphone OS Mockobjekte für iphone OS TDD für iphone OS?

Unit Testing auf dem iphone Vor iphone OS 3.0: kaum dokumentiert nur auf dem Entwicklungsrechner Seit iphone OS 3.0: gut dokumentiert auch direkt auf dem Device

Unit Testing für Mac OS X Gibt es schon lange! SenTestingKit (aka OCUnit) Basiert wie JUnit auf SUnit Release 1.0: Mai 1998 (JUnit: Februar 1998) Seit Mitte 2005 von Apple in Xcode integriert

Testfallklasse ExampleTests.h: #import <SenTestingKit/SenTestingKit.h> #import <UIKit/UIKit.h> @interface ExampleTests : SenTestCase {} @end ExampleTests.m: #import "ExampleTests.h" @implementation ExampleTests - (void)testfail { STFail(@"I can haz fail?!"); } @end

Assertions Unterschiede zu JUnit: Test auf Gleichheit: Erwartung steht an 2. Stelle Fehlgeschlagene Assertion bricht den Test nicht ab Kommentar ist Pflichtparameter Assertions sind C-Makros

Assertions STAssertEquals, STAssertEqualObjects STAssertEqualsWithAccuracy STAssertNil, STAssertNotNil STAssertTrue, STAssertFalse STAssertThrows, STAssertThrowsSpecific

Unit Testing für das iphone Zwei Arten von Tests Logic Tests Application Tests

Logic Testing Isoliert Teile des Codes in einem eigenen Test Bundle Tests laufen auf dem Entwicklungsrechner x86-binary! Eigentliche Applikation läuft dabei nicht, weder im Simulator noch auf dem Device

Application Testing Tests werden in der Applikation ausgeführt Tests laufen nur direkt auf dem Device Die Applikation muss also laufen

Logic-Testing konfigurieren Unit Test Bundle Target " Tests" hinzufügen (zum Beispiel "LogicTests") LogicTests in das Target der Applikation ziehen

Testfallklasse hinzufügen (Gruppe Tests erzeugen) Objective-C test case class zum Target LogicTests (!) hinzufügen Im Test: USE_APPLICATION_UNIT_TEST auf 0 setzen oder Template aufräumen

Logic Tests laufen lassen Durch Target-Abhängigkeit automatisch beim Build Fehlgeschlagene Tests werdenwurden bis Xcode 3.1 wie Compile-Fehler angezeigt Vorsicht: Tests werden nur beim Simulator- Target ausgeführt!

Application Testing konfigurieren Application Target duplizieren in Target " Testing" (zum Beispiel "MyAppTesting") Unit Test Bundle Target " Tests" hinzufügen (zum Beispiel "MyAppTests") MyAppTests in das Target der App ziehen MyAppTests.octest in Copy Bundle Resources von MyAppTesting ziehen

Testfallklasse hinzufügen (Gruppe Tests erzeugen) Objective-C test case class zum Target MyAppTests (!) hinzufügen Im Test: USE_APPLICATION_UNIT_TEST auf 1 lassen oder Template aufräumen

Application Tests laufen lassen Ausführung beim Starten der App mit Target MyAppTesting auf dem Device Fehlgeschlagene Tests werden textuell in der Debug-Konsole angezeigt Vorsicht: Application Tests werden bei Simulator-Target schon beim Build ausgeführt und schlagen daher meist fehl

Logic Tests vs Application Tests Logic Tests bevorzugen: Beim Simulator-Build ausgeführt, schneller, besser integriert Application Tests eher für Akzeptanztests und für Dinge, die nur auf dem Device gehen, z.b. Security-Framework Logic Tests auch zu Application Tests hinzufügen, wenn möglich

Mockobjekte für iphone OS Seit 2004: OCMock Verwandt zu EasyMock Verwendet das Trampoline-Pattern [mock expect] gibt ein Proxy-Objekt zurück Proxy-Objekt erlaubt Definition der Erwartungen

OCMock konfigurieren OCMock.framework zu LogicTests hinzufügen Neue Copy Files Build Phase für Frameworks, OCMock.framework rein In LogicTests Build-Settings: Runpath Search Paths auf ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH} setzen

OCMock-Beispielcode #import <OCMock/OCMock.h> #import "ExampleTests.h" #import "User.h" (sinnfrei) @implementation ExampleTests - (void)testuser { id user = [OCMockObject mockforclass:[user class]]; [[user expect] setname:@"john"]; [[[user expect] andreturn:@"john"] name]; [user setname:@"john"]; STAssertEqualObjects([user name], @"John", @""); [user verify]; } @end

Mockobjekte mit OCMock Für Klassen: + (id)mockforclass:(class)aclass; + (id)nicemockforclass:(class)aclass; Für Protokolle: + (id)mockforprotocol:(protocol *)aprotocol; + (id)nicemockforprotocol:(protocol *)aprotocol; Partieller Mock für ein Objekt: + (id)partialmockforobject:(nsobject *)anobject;

Expectations auf Mockobjekten Geprüft: [[mock expect] methodenaufruf ]; Ungeprüft: [[mock stub] methodenaufruf ]; Aufrufreihenfolge prüfen: [mock setexpectationordermatters:yes]; Endabnahme: [mock verify];

Prüfen von Argumenten Beispiele für Argument-Checks für [[mock expect] setname: ]; Equals-Check: @"John Doe" Alle zulassen: [OCMArg any] Nicht nil: [OCMArg isnotnil] Hamcrest-Matcher: startswith(@"john")

Verhalten von Mockobjekten Das Übliche: [[[mock stub] andreturn:@""] name]; [[[mock stub] andreturnvalue:42] count]; [[[mock stub] andthrow:anexception] dostuff]; Nicht so üblich: [[[mock stub] andpost:anotification] dostuff]; [[[mock stub] andcall:aselector onobject:anobject] dostuff];

Meine Meinung zu OCMock Trampoline-Pattern Nachteile: Gewöhnungsbedürftig, keine intelligente Completion Vorteil: kein [mock replay] Warum kein OCEasyMock? Bisher keine wirklich bessere Syntax gefunden

TDD für iphone OS? Pflicht erfüllt: Unit Testing Framework (Mockobjekte) Reicht das?

TDD Grün-rot Rot-grün Refactoring

Grün-rot OK: Neuen Test schreiben, Build FAIL: Bei neuen Klassen keine Completion ins Unbekannte: Klasse selbst erzeugen FAIL: Bei neuen Methoden nur Warnung FAIL: Bei neuen Methoden keine Completion ins Unbekannte: Signatur selbst in den Header schreiben und selbst leer implementieren

Rot-grün OK: Implementieren muss man immer noch selbst ;)

Refactoring Aktuell in Xcode 3.2.1: Extract Method/Function Rename Class/Method/Variable Move Up/Move Down Create Superclass Encapsulate, Modernize Loop

Refactoring-Probleme Recht langsam Nicht so zuverlässig Eingeschränkt, es fehlen viele Refactorings Extract Local Variable Inline Method

Meine Meinung zu TDD für das iphone Geht, ist aber mühsam Erinnert an Java vor langer Zeit Completion ins Unbekannte fehlt sehr Refactoringunterstützung ist vielleicht nicht perfekt, aber immerhin vorhanden Wichtigster Punkt: Viel besser, als viele ahnen! ("TDD-feindliche Umgebung"?!)

Weitere Informationen Dokumentation: Unit Testing Applications im iphone Development Guide Sample Code: iphoneunittests OCMock: Suchen mit Google ;)

Die letzte Folie Vielen Dank für Ihr Interesse! Tammo Freese business@tammofreese.de twitter: tammofreese