Unit Tests

Bevor mit den Unit-Tests begonnen wird stellt sich die Frage, ob die Bibliothek Funktionen enthält die nicht öffentlich sind. Für einen Sortier-Algorithmus bietet sich eine generische swap Funktion an. Deshalb wird eine Anforderungsliste für diese Funktion erstellt.

Swap()

Die Funktion soll in der Lage sein, Elemente einer bestimmten Grösse unabhängig vom Datentyp zu tauschen.

  • void Schnittstelle für die Elemente welche getauscht werden sollen.

  • Schnittstellen Parameter welche die Grösse eines Elementes spezifiziert.

  • Überprüfung der Argumente

  • Rückgabewert über den Erfolg der Ausführung

Die Entscheidung fällt auf folgende Schnittstelle:

static int swap(void *firstElement, void *secondElement, size_t sizeOfElement)

Leere Implementation

Für eine Test getriebene Entwicklung müssen stets zuerst die Tests erstellt werden und erst in einem weiteren Schritt die eigentliche Implementation. Jedoch ist eine linkbare Funktion notwenig um die Unit-Tests überhaubt ausführen zu können. Aus diesem Grund wird eine minimale Implementation realisiert.

bubbleSort.c

#include "bubbleSort.h"

static int swap(void *firstElement, void *secondElement, size_t sizeOfElement)
{

}


int bubbleSort(void *base, size_t numberOfElements, size_t sizeOfElement,
        int (*compare)(void const *firstKey, void const *secondKey))
{

}

Diese Datei wir in einem Verzeichnis src/ an der Projektwurzel angelegt.

Unit Tests swap()

Auch für die Unit-Tests wird ein eigenes Verzeichnis angelegt. Ceedling selbst erstellt bereits eine Verzeichnisstruktur. Mit dem Befehl

: ~/bubbleSortLibrary
$ ceedling new tst

kann ein neues Projekt mit dem Namen tst erstellt werden. Das Projekt selbst heisst zwar nicht tst, jedoch sollen die Tests in einem Verzeichnis mit diesem Namen abgelegt werden. Ceedling hat bereits ein eigenes Verzeichnis mit dem namen src/ angelegt, in jenem es auch nach Quellcode sucht. Nun kann die Ceedling Projekt-Datei so angepasst werden, damit auch die Verzeichnisse inc/ und src/ welche in den vorherigen Schritten erstellt wurden berücksichtigt werden.

# ---> snip
#:release_build:
#  :output: MyApp.out
#  :use_assembly: FALSE

:environment:

:extension:
  :executable: .out

:paths:
  :test:
    - +:test/**
    - -:test/support
  :source:
    - ../src/
    - ../inc/                                                                                            
#    - src/**
  :support:
    - test/support
# <--- snap

Mit folgendem Befehl, kann ein neues Unit-Test modul mit Hilfe von ceedling erstellt werden:

: ~/bubbleSortLibrary/tst
$ ceedling module:create[swap]

Wobei die beiden erstellten Dateien, src/swap.c und src/swap.h direkt entfernt werden. Da diese Funktion kein eigenes Modul bildet, sondern im Modul bubbleSort implementiert wird.