restfuse – REST API mit JUnit Testen

Bei einem meiner Projekte, an denen ich in meiner Freizeit aktuell arbeite, bin ich momentan dabei, die REST API zu erstellen. Bisher habe ich neue Funktionalitäten „per Hand“ und mithilfe eines Browser-Plug-ins getestet. Da mir das aber zu zeitaufwendig war und ich sicherstellen wollte, dass die API auch nach Änderungen an anderen Stellen im Code noch das tut, was sie soll. Habe ich mich gefragt, ob es eine einfache Möglichkeit gibt um mit JUnit REST APIs zu testen. Nach etwas Recherche im Internet weiß ich nun, die gibt es und sie heißt: restfuse und ist ein freie JUnit Erweiterung der Firma EclipseSource.

Installation

Um restfuse verwenden zu können muss man nicht viel tun. Aktuell gibt es drei verschiedene Wege:

Weg 1: Die Binaries von der Webseite herunterladen und Java typisch einbinden.

Weg 2: Direktes Einbinden als Eclipse Plugin über folgendes p2 Repository: http://download.eclipsesource.com/technology/restfuse/p2

Weg 3: Einbinden über maven für die aktuelle Version 1.2.0 geht dies so:

<dependency>
  <groupId>com.restfuse</groupId>
  <artifactId>com.eclipsesource.restfuse</artifactId>
  <version>1.2.0</version>
</dependency>

 

Verwendung

Um restfuse zu verwenden, wird JUnit über die Annotation @RunWith angewiesen den HttpJUnitRunner zu verwenden. Zusätzlich benötigt restfuse eine @Rule welche die Ziel URL aller Tests dieser Klasse festlegt. Durch @Context bekommt man in eine Klassenvariable mit dem Typ Response die HTTP Antwort des Servers injiziert. An die einzelnen Tests kommt statt wie üblich anstatt eines @Test ein @HttpTest. Diese Annotation benötigt mindestens die method also die HTTP-Anfragemethode und den path. Der path gibt den, von der Ziel URL ausgehenden, Pfad an.

import static com.eclipsesource.restfuse.Assert.assertOk;

import org.junit.Rule;
import org.junit.runner.RunWith;

import com.eclipsesource.restfuse.Destination;
import com.eclipsesource.restfuse.HttpJUnitRunner;
import com.eclipsesource.restfuse.Method;
import com.eclipsesource.restfuse.Response;
import com.eclipsesource.restfuse.annotation.Context;
import com.eclipsesource.restfuse.annotation.HttpTest;

@RunWith(HttpJUnitRunner.class) // Weißt JUnit an, die Klasse mit dem HttpJUnitRunner von restfuse auszuführen.
public class BeispielRestfuseTest {

    @Rule
    public final Destination destination = new Destination(this, "http://nicklas.wiegandt.eu");// Gibt das Ziel der Tests an. Also die Basis URL.

    @Context
    private Response         response;                                                         // Bekommt die HTTP Antwort injiziert.

    @HttpTest(method = Method.GET, path = "/") // Die Hauptkomponente von restfuse. Hierüber wird der eigentliche Test gesteuert.
    public void checkWiegandtEuOnlineStatus() {
        assertOk(response);// Ein Assert von restfuse welches den HTTP Code 200 OK abfragt.
    }
}

Dies waren jedoch lediglich die Grundfunktionalitäten um einen einfachen HTTP-GET Aufruf durchzuführen. restfuse bietet noch einige weitere Funktionalitäten. Von GET und POST bis hin zu polling und callbacks bietet restfuse alles, was man sich zum Testen von REST APIs bietet.

Weitere Informationen zur Verwendung von restfuse können der Offiziellen Webseite und der Dokumentation entnommen werden. Eine Sammlung von weiteren Beispielen ist auf der Offiziellen GitHub Seite von restfuse zu finden.

Fazit

Ich finde restfuse sehr gelungen und setze es seit ich es gefunden habe zum testen meiner REST APIs ein. Bisher konnte ich alles damit testen, was ich testen wollte und bin sehr zufrieden. Die Verwendung ist kinderleicht und wird durch eine gute JavaDoc Dokumentation und gute Beispiele unterstützt.

Projektmanagment, Analyse und Planung bei Hobby Projekten


HINWEIS: Dieses Tutorial wird aktuell nicht fortgesetzt, da ich dieses neu Aufbaue. Das neue Tutorial zu diesem Thema wird hier demnächst verfügbar sein. Für aktuelle Informationen: http://twitter.com/Nicklas2751

Einleitung

In der Wirtschaft ist es gang und gäbe, dass (Software-)Projekte gut geplant und vorbereitet werden. Schaut man sich allerdings in der Welt, der Hobby Entwickler um trifft, man nur selten auf ordentliches Projektmanagement. In diesem Beitrag möchte ich darauf eingehen, warum ich Dinge wie Projektmanagement, Analyse und Planung auch für Hobby-Projekte für sinnvoll und wichtig halte.
„Projektmanagment, Analyse und Planung bei Hobby Projekten“ weiterlesen

Softwareentwicklung in Java – Tutorial für Anfänger – Teil 02: Sichtbarkeiten & Kapselung

Sichtbarkeiten

In Java gibt es verschiedene Sichtbarkeiten. Eine Sichtbarkeit gibt an in welchen „Umfeld“ eine Methode/Klasse/Varibale sichtbar, also nutzbar ist. Bei einer Variable bedeutet dies, dass sie nur von den Stellen aus veränderbar ist an denen sie auch sichtbar ist. Bei einer Klasse hingegen bedeutet dies, dass sie nur von den Stellen aus erzeugt werden kann an denen sie sichtbar ist. Methoden hingegen können nur von den Stellen aus aufgerufen werden an denen sie sichtbar sind. „Softwareentwicklung in Java – Tutorial für Anfänger – Teil 02: Sichtbarkeiten & Kapselung“ weiterlesen

Einstieg in die Programmierung

Programmieren was ist das?

An sich kann der Begriff „Programmieren“ verschiedene Bedeutungen haben, wenn man Wikipedia fragt erfährt man:

Programmierung (von griechisch prógramma „Vorschrift“) bezeichnet die Tätigkeit, Computerprogramme zu erstellen. Dies umfasst vor allem die Umsetzung (Implementierung) des Softwareentwurfs in Quellcode sowie – je nach Programmiersprache – das Übersetzen des Quellcodes in die Maschinensprache, meist unter Verwendung eines Compilers.

Seite „Programmierung“. In: Wikipedia, Die freie Enzyklopädie. Bearbeitungsstand: 5. Februar 2014, 16:03 UTC. URL: http://de.wikipedia.org/w/index.php?title=Programmierung&oldid=127242235 (Abgerufen: 19. Februar 2014, 19:53 UTC)

Und genau darum soll es hier gehen. „Einstieg in die Programmierung“ weiterlesen