Anzeige:
Ergebnis 1 bis 3 von 3

Thema: CUnit für Noobs

  1. #1
    Registrierter Benutzer Avatar von roadracer
    Registriert seit
    16.02.2010
    Ort
    Wolfenbüttel
    Beiträge
    48

    CUnit für Noobs

    Hallo,
    ich ineressiere mich für CUnit, hab' aber keinen Plan von Unit-Tests. Daher suche ich ein Tutorial oder gutes Buch, das diese Themen von Grund auf behandelt.

    VG
    OpenSUSE 12.1 x86 KDE 4.7

    Alle Rechtschreibfehler unterliegen der GFDL und dürfen so oder in veränderter Form genutzt und weiter gegeben werden.

  2. #2
    Registrierter Benutzer
    Registriert seit
    18.04.2008
    Beiträge
    59
    hi,

    ich arbeite mich auch noch ein und würde zusammenfassend sagen, dass man oft einfach eine Testsuite hat (wenn man refactored oder mit Legacy Code arbeitet, sollte man sich bestenfalls zu jeder neuen Methode ein Test schreiben) die Assertionen ausführt, um eine Probe (Beweis) auf den Code zu haben und zu garantieren, daß nach einer Änderung die Funktionen wie erwartet abgearbeitet werden.

    Leider kann es passieren, dass man diverse Fälle nicht mit seinen Tests abdeckt oder nur schwer über Fakes (vereinfachte Abbildung eines Objektes), Stubs (statische Antwort eines Objektes - z.B. einen Server simulieren), Mocks (Validieren des Aufrufen weiterer Methoden), abdecken kann, einen Fehler im Test hat oder einfach mal eine wichtige Methode nicht mit Tests abgedeckt hat (Code Coverage).
    Und es geht nicht nur um das Schreiben der Tests, sondern auch um Code der testbar ist.


    Zitat Zitat von roadracer Beitrag anzeigen
    Unit-Tests. Daher suche ich ein Tutorial oder gutes Buch, das diese Themen von Grund auf behandelt.
    unter dem Stichwort "xUnit", bzw. "Test-driven development" (TDD) könntest du gute allgemeine Literatur zu Unit Tests finden. "Continous Integration", wie bspw. Hudson, integrieren Unit Tests.

    Martin Fowler und Kent Beck sind sicherlich eine sehr gute Quelle.

    Ich lese z.Zt. "Clean Code" von Robert C. Martin und dort sind auch einge Anregungen zu finden.

    Zitat Zitat von roadracer Beitrag anzeigen
    ich ineressiere mich für CUnit
    Mich hat es auch mal interessiert und habe mehrere C Entwickler gefragt,
    xUnitTests sind wohl aber unter C Programmieren noch nicht so sehr verbreitet, da die meisten TDD Bücher Beispiele für Java enthalten.
    Genau dies hat vor kurzem James Grenning geändert und mit "Test-Driven Development for Embedded C" ein Buch für C (auch C++) Programmierer geschrieben (pragmatic bookshelf verlag).
    Beipiele sind mit CppUTest und Unity und bin schon nach wenigen Seiten sehr begeistert, ist aber auf englisch (Uncle Bob's "Clean code" gibt es in sehr guter deutscher Übersetzung).

    Unit Tests mit `assert` (C Funktion aus assert.h, s. Bsp: Abdecken von Funktionalität in einem kleinen Teilen mit Fokus auf Anwendungslogik, so lässt sich dieses Modul isoliert und schnell testen).
    Bspw. mit einem Preprozessor Makro "Test" eine main (in einer Library) ausführen und dort den Code mit assert testen.

    Ein Unterschied zu einem Unit Test mit assert ist, daß
    xUnitTests auch implizit Integration abdecken.
    Ein weiterer Unterschied ist, daß
    xUnitTests gleich eine Reihe von assert_x (assertEquals(a, b) etc.) implementieren und ggf. auch in einer Art "Sandbox" ablaufen.


    Code:
    #include <stdio.h>
    
    /* http://kerneltrap.org/node/4705 */
    #define likely(x)       __builtin_expect((x),1)
    #define unlikely(x)     __builtin_expect((x),0)
    
    #define MAX_BYTES 2
    
    #define TEST_RUN 1
    
    int
    testfun(int x)
    {
    	if(unlikely(x)) {
            /*                      ^^^--- We instruct the compiler, "else" block is more probable */
                    x = 5;
                    x = x * x;
            } else {
                    x = 6;
            }
            return x;
    }
    
    #ifdef TEST_RUN
    
    #include<assert.h> 
    
    int main(int argc, char** argv)
    {
    	
    	int i = testfun(0);
    	// printf("%d\n", testfun(0));
    	assert (i == 6);
    	// printf("%d\n", testfun(1));
    	i = testfun(1);
    
    	assert (i == 25);
    	
    	printf("%s\n", "bye.");
    
    	return 0;
    }
    
    #endif
    Geändert von zenobic (21-05-2011 um 15:43 Uhr) Grund: "Test-Driven Development for Embedded C" Buchtipp

  3. #3
    Registrierter Benutzer
    Registriert seit
    18.04.2008
    Beiträge
    59
    die Links falls interesse besteht, der Vollständigkeit halber:

    Das Buch:
    http://pragprog.com/titles/jgade/tes...for-embedded-c

    Cooles Beispiel vom Autor anhand des Microsoft zune Bugs:
    http://www.renaissancesoftware.net/blog/archives/38

    Die erwähnten Unit Test Frameworks :
    http://sourceforge.net/apps/trac/unity/wiki
    http://www.cpputest.org/

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •