Benutzer-Werkzeuge

Webseiten-Werkzeuge


cocoaheads:testing

View page as slide show


Diese Wiki Seite sieht etwas verhagelt aus, da sie in erster Linie im Präsentationsmodus funktionieren muß.

Browser im Kiosk Modus: * Safari: keine Ahnung * Firefox recht gut per Plugin: https://addons.mozilla.org/de/firefox/addon/1568 * Opera von Haus aus

= Unit Testing Cocoa

Vortrag am 17. März 2010

The main thing that distinguishes legacy code from non-legacy code is tests, or rather a lack of tests. Michael Feathers


ungeordnete Stichpunkte * Michael Feathers http://www.objectmentor.com/omTeam/feathers_m.html * Martin Fowler

* Michael T. Nygard http://www.pragprog.com/titles/mnee/release-it * SQLite Testing http://www.sqlite.org/testing.html

== Was ist ein Unit Test?

* Testprogramm für einzelne Programmbausteine (Klassen, einzelne Methoden), * zustandslos, bereitet die Vorbedingungen selbst vor, * automatisierbar, prüft alle Nachbedingungen, Schritt im Build Prozeß, * normalerweise in der gleichen Sprache geschrieben wie der zu testende Code, * nicht Teil des ausgelieferten Programms.

== Quelltext Impression

#import <SenTestingKit/SenTestingKit.h>
@interface MyClassTC : SenTestCase {}
@end
 
#import "MyClass.h"
@implementation MyClassTC
-(void)setUp {
}
 
-(void)tearDown {
}
 
-(void)testMethodXY {
  ...
  STAssertEqualObjects(@"expected", ..., @"fail");
}
@end

== Was nützen mir Unit Tests?

* Klarheit der Abhängigkeiten in meinem Code (Stichwort Dependency Injection & Inversion of Control), * Refactoring ohne Nervenkitzel, * eindeutig definiertes Verhalten (Design by Contract), Förderung der Teamarbeit, * keine „vergessenen“ Tests, da jeder Build alle prüft, Bedingung für Continuous Integration.

== Wie geht's prinzipiell?

* Test Framework zur bequemen Entwicklung, Ausführung und für Berichte, * normalerweise pro Logikbaustein (Klasse) eine Testklasse, * pro Bug / gewünschtem Verhalten eine Testmethode:

-(void)testRFC1123 {
  NSString *s = @"Fri, 14 Aug 2009 14:45:31 GMT";
  STAssertEqualObjects(s, [[NSDate dateFromRFC1123:s]
    rfc1123String], @"fail");
}

== Wie geht's mit Cocoa

* SenTestingKit / OCUnit kommt von Apple mit - gibt aber auch andere Implementierungen und Zusätze, * neues XCode Target: „Cocoa > Unit Test Bundle“ * direkte Abhängigkeit vom bisherigen Target, fertig. * …und jetzt der schwierige Teil:

== Step & Trace

dazu brauchen wir ein „Custom Executable“: * Pfad Developer/usr/bin/otest relativ zu „Current SDK“ * einige Parameter und etliche Umgebungsvariablen das können wir dann als Active Executable starten und debuggen. Vorsicht: * Parameter und Umgebungsvariablen gehen in die *.pbxuser Datei ein und gehen drum leicht verloren. * die Debugsitzung startet nur, wenn alle Tests erfolgreich sind (Build Abhängigkeit) - ich kommentiere die kritischen STAsserts zeitweise aus (Holzhammer)


== NSLog

* Terminal: xcodebuild auf das Test Target loslassen und die NSLogs kommen auf die Konsole * XCode: Custom Executable als Active Executable und schon sehen wir die NSLogs auch.

== Exkurs: Entwicklungsprozesse

* Extreme Programming (XP), * Test Driven Development (TDD), * Documentation Driven Development (DDD), * Design by Contract (DbC).


* DDD mit Link zu "presentation on Documentation-Driven Development" (Slideshare)

== Was ich vermisse

* einfachere Projekteinrichtung, * benutzerbezogene Einstellungen abschaffen, * Testabdeckung messen und anzeigen. (CoverStory?) Test Coverage

== Locker bleiben

Don’t stress about unit tests. They are intended as a tool for ensuring good test coverage and memory management. Use them in that way to aid your development process. ADC

* Unit Tests verhindern natürlich nicht jeden Bug, * Testing-Taliban schrecken moderate Seelen oft ab, * ein laufendes Programm ist wichtiger als 100% Testabdeckung, * die ersten Tests für Spaghetti Code können allerdings frustrieren.

== Querverweise / Lesetips

* 51rcxgpxq8l._sl500_aa240_.jpgMichael Feathers: Working Effectively with Legacy Code * Erica Sadun bei TUAW

XCode Anleitungen die ich schlußendlich verstanden habe: * Cocoa with Love: A sample iPhone App with unit tests * Cocoa with Love: A sample Mac Application with unit tests * meine Zusammenfassung zur XCode Projekteinrichtung

== Vielen Dank

für Eure Aufmerksamkeit.

Feedback willkommmen an Marcus Rohrmoser

Die Folien zum Nachlesen gibt's hier:

http://mro.name/go/cocoaheads_testing


aus Sicht eines iPhone Entwicklers.

ein Vortrag bei den CocoaHeads von

cocoaheads/testing.txt · Zuletzt geändert: 2017/07/20 23:40 von mro