2013-08-15 13 views
6

W odniesieniu do poniższej lekcji, w jaki sposób chciałbyś napisać test jednostkowy? Czytałem, że każdy test, który wykonuje plik IO, nie jest testem jednostkowym, więc czy jest to test integracyjny, który należy zapisać? Używam xUnit i MOQ do testowania i jestem bardzo nowy, więc może mógłbym MOQ pliku? Niepewny.Jak testujesz kod, który tworzy plik IO?

public class Serializer 
{ 
    public static T LoadFromXmlFile<T>(string path) 
     where T : class 
    { 
     var serializer = new XmlSerializer(typeof(T)); 

     using (var reader = new StreamReader(path)) 
     { 
      return serializer.Deserialize(reader) as T; 
     } 
    } 

    public static void SaveToXmlFile<T>(T instance, string path) 
    { 
     var serializer = new XmlSerializer(typeof(T)); 

     using (var writer = new StreamWriter(path)) 
     { 
      serializer.Serialize(writer, instance); 

      writer.Flush(); 
     } 
    } 
} 
+0

Co próbujesz pokryć testem jednostki? Jaki jest przykład testu zaliczenia/niepowodzenia? –

Odpowiedz

6

W podobnych sytuacjach Mam zmodyfikowany podpisy metoda zaakceptować TextWriter lub strumienia (w zależności od sytuacji) i jednostkę przetestowany przez przechodzącą w StringWriters lub MemoryStreams i porównując wynikowy ciąg lub tablicy bajtów do oczekiwanego rezultatu . Stąd jest dość bezpieczne założenie, że FileWriter lub FileStream będą produkować takie same dane wyjściowe w pliku przy założeniu, że ścieżka jest poprawna i masz niezbędne uprawnienia.

1

Prawdopodobnie jest to przykład testu, którego nie trzeba pisać.

Ale JEŚLI chcesz przetestować rzeczywisty poziom plików. Można napisać znany plik do określonej lokalizacji, a następnie przetestować plik binarny, do którego należy odczytać plik, jest taki sam, jak wstępnie przygotowany strumień binarny.