2008-11-13 15 views
16

Piszę program ruby, który wykonuje niektóre zewnętrzne narzędzia wiersza polecenia. Jak mogłem sfałszować system plików z moich testów rspec, aby móc łatwo ustawić hierarchię plików i zweryfikować ją po testach. Najlepiej byłoby też zostać wdrożonym w ramie, aby testy przebiegały szybko.Mock system plików w testach integracyjnych

Zdaję sobie sprawę, że mogę nie znaleźć rozwiązania przenośnego, ponieważ moje narzędzia zewnętrzne są rodzimymi programami bezpośrednio współpracującymi z usługami plików systemu operacyjnego. Linux jest moją podstawową platformą, a to wystarczy.

Odpowiedz

8

Może to nie odpowie na twoje pytanie bezpośrednio, ale w takich przypadkach mam tendencję do tworzenia katalogu tymczasowego podczas konfiguracji testu i usuwania go po rozpadzie. Oczywiście musisz również dopilnować, aby aplikacja zapisywała się w tym katalogu tymczasowym. Zawsze mam opcję konfiguracyjną definiującą katalog docelowy, który mogę nadpisać podczas testowania.

Jeśli chodzi o twierdzenia, używam zwykłego File.exist? lub File.directory?, ale oczywiście można tworzyć wokół niego własne opakowania. Jeśli potrzebujesz jakiegoś początkowego stanu, możesz zbudować katalog, który może być używany jako urządzenie i zostanie skopiowany do tymczasowego katalogu podczas konfiguracji testowej.

+0

Może to działać z systemem plików ramdisk, ale szukałem bardziej zaawansowanego rozwiązania. – JtR

+0

Gdzie tworzysz katalogi tymczasowe? Czy tworzenie i usuwanie/tmp/my_test_dir jest bezpieczne? –

5

Można utworzyć duży plik (rozmiar manekina dysku) i zamontować plik jako loop-back device. Możesz utworzyć dowolny system plików i strukturę katalogów na tym urządzeniu.
Można utworzyć 2 z nich i dokonać nawet prostego porównania, aby zapewnić integralność danych po testach.
Mam nadzieję, że dobrze rozumiem wymagania, ponieważ nie wiem, dlaczego proste rozwiązanie ramdysku nie jest wystarczająco dobre.
This może być również trafny.

+0

Cholera, to prawdziwa naukowa odpowiedź, ale prawdopodobnie nie dla większości Rubyistów. Jednak powinno działać. Wezmę głos w imieniu geek. :-) –

+0

Przyjmę to jako komplement :) – Ilya

+0

Możesz wziąć ten wątek o krok dalej z unionfs: http://en.wikipedia.org/wiki/UnionFS – Frobbit

36

Czy wymeldowałeś się FakeFS lub MockFS ?

Uwaga: Oryginalny link do MockFS nie działa. It looks like to już nie jest utrzymywane.

+0

Nie, nie, dziękuję! – JtR

+0

Fajnie - jeszcze go wypróbowałem, ale tego właśnie szukam ... –

+0

Naprawdę miły, pomocnik Rspec został wysłany! –