Odpowiadając na twoje konkretne pytanie: Nie, nie ma bibliotek, które pozwolą ci na mockowanie wywołań we / wy plików (o których wiem). Oznacza to, że „prawidłowe” testowanie jednostek typów będzie wymagało uwzględnienia tego ograniczenia podczas definiowania typów.
Krótka uwaga na temat tego, jak definiuję „właściwy” test jednostkowy. Uważam, że testy jednostkowe powinny potwierdzić, że otrzymujesz oczekiwane dane wyjściowe (np. Wyjątek, wywołanie metody itp.) Pod warunkiem, że znane dane wejściowe. Umożliwia to skonfigurowanie warunków testu jednostki jako zestawu wejść i / lub stanów wejściowych. Najlepszym sposobem, jaki znalazłem, jest użycie usług opartych na interfejsach i iniekcji zależności, tak aby każda odpowiedzialność zewnętrzna w stosunku do typu była dostarczana za pośrednictwem interfejsu przekazanego przez konstruktor lub właściwość.
Mając to na uwadze, wracając do pytania. Kpiłem z wywołań systemu plików, tworząc IFileSystemService
interfejs wraz z FileSystemService
implementacją, która jest po prostu fasadą metod systemu plików mscorlib. Mój kod używa następnie IFileSystemService
typów zamiast mscorlib. Dzięki temu mogę podłączyć mój standard, FileSystemService
gdy aplikacja jest uruchomiona lub udawać IFileSystemService
w moich testach jednostkowych. Kod aplikacji jest taki sam, niezależnie od tego, jak działa, ale podstawowa infrastruktura umożliwia łatwe testowanie tego kodu.
Przyznaję, że używanie opakowania wokół obiektów systemu plików mscorlib jest uciążliwe, ale w tych konkretnych scenariuszach warto wykonać dodatkową pracę, ponieważ testowanie staje się znacznie łatwiejsze i bardziej niezawodne.