2013-05-09 13 views
6

pyfakefs brzmi bardzo użytecznie: "został pierwotnie opracowany jako skromna, fałszywa implementacja podstawowych modułów Pythona do obsługi umiarkowanie skomplikowanych interakcji w systemie plików i został wprowadzony w całym Google. We wrześniu 2006 roku. Od tego czasu otrzymał wiele (dobrze przetestowanych) odpowiedzi na rozszerzenie swojej funkcjonalności i przydatności i jest używany w ponad 900 testach Google Python. "Sposób zastępowania odwołań dotyczących dostępu do pliku dla badanego modułu

Dokumentacja wydaje się obecnie dostępna tylko w ramach samych specyfikacji dokumentu source code. Wyjaśnia, że ​​moduł zapewnia następujące elementy:

  • FakeFile: Zapewnia wygląd prawdziwego pliku.
  • FakeDirectory: Zapewnia wygląd prawdziwego reż.
  • FakeFilesystem: Zapewnia wygląd prawdziwej hierarchii katalogów.
  • FakeOsModule: Używa FakeFilesystem do zapewnienia wymiany fałszywego modułu os.
  • FakePathModule: Fakowana wymiana modułu os.path.
  • FakeFileOpen: Faked file() i open() zastępują funkcje.

Dokumentacja nie wyjaśnia jednak, jak skutecznie używać tych elementów w testowaniu.

Jaki jest właściwy sposób na zapewnienie, że testowany moduł uzyskuje dostęp do fałszywego systemu plików, a nie do prawdziwego?

+0

Myślę, że te interfejsy API, które wykryto w docstrukcjach, są w zasadzie tym, co trzeba wywołać podczas testowania. Więc umieszczasz go w indywidualnej metodzie testowania, konfiguracji lub setupClass (lub tearDown *). Co cię jeszcze martwi? – CppLearner

+0

Nie wiem, jak sprawić, by moduł był testowany pod kątem używania systemu plików, który utworzę za pomocą interfejsu API 'fake_filesystem'. Nie wydaje mi się, żeby było sensowne, na przykład, dostarczanie funkcji 'file()' do klas lub funkcji mojego modułu tylko ze względu na umożliwienie testowania. Raczej spodziewam się tego zrobić z "życzliwym łataniem małp" w sposób podobny do [tej odpowiedzi] (http://stackoverflow.com/questions/295438/how-can-one-mock-stub-python-module- like-urllib? rq = 1 # answer-295481), ale nie jestem do końca pewien, co należy poprawić. – intuited

+0

Łatka małp nie jest tak łatwa, jeśli musisz to zrobić od samego początku. Możesz sprawdzić sztuczną bibliotekę z Pythona i użyć jej do poprawienia pewnych operacji poprzez dostarczenie obiektu, który chcesz zwrócić. Mogę dać trochę myśli dzień lub dwa od teraz. Tymczasem zobaczę, czy inni mogą dać ci kilka myśli. Alternatywą jest wtrysk uzależnienia - ale to działa i ma sens, jeśli twoja funkcja lub metoda jawnie przekazuje pewne zależności, na przykład obiekt podobny do pliku lub obiekt sesji bazy danych. – CppLearner

Odpowiedz

Powiązane problemy