Dateizugriffe verschalen für Testfälle mit JBehave und Easymock

Im Moment beschäftige ich mich inhaltlich damit, größere Mengen von Dateien zu verarbeiten. Methodisch bin ich immer noch bei BDD am Werk. Das ergibt den Kreuzungspunkt: Wie kann ich Dateizugriffe für Tests verschalen? Sobald das funktioniert, kann ich in den automatischen Build-Prozess einfach ein paar Beispieldateien integrieren.

Wie so viele habe ich nur mässige Freiheiten dabei, den Dateizugriff einfach zu isolieren. Dieser und ähnliche Tests sollen dazu dienen, das Ganze sicher refactoren zu können.

Der Ausgangspunkt ist, dass die Klasse sowohl Input aus der Datei als Übergabeparameter zieht als auch die Datei selbst weiter auswertet.

So funktioniert’s – dieser Code „lebt“ in der Testklasse:

[java]
import static org.easymock.EasyMock.*;

// …

// Datei in einer Weise öffnen, die gegen Maven, JUnit usw. robust ist:
InputStream is = this.getClass().getClassLoader()
.getResourceAsStream(filename);

// prepare call to WorkerClass based on data from is
ArgumentObject ao = processing(is);

// …
// Mock file access
// see „partial mocking“ in Easmymock documentation

WorkerClass mockWorker = createMockBuilder(WorkerClass.class)
.addMockedMethod(„myMethod“).createMock();
expect(mockWorker.makeInputStream(anyObject(WorkerClass.class))).andReturn((InputStream) is);

// GO!
replay(mockWorker);
mockWorker.myMethod(ao);
[/java]

Voraussetzung dafür ist, dass der Dateizugriff in WorkerClass wenigsten so weit umgstellt wird, dass er über einen InputStream erfolgt, nicht direkt über den Dateinamen.

Kommentar verfassen