Wczytywanie pliku a testy jednostkowe

0

Witam. Mam małą zagwozdkę i nie wiem do końca jak to zrobić.
Mam pewną logike, która w danym momencie potrzebuje wczytać plik (xml). Jak zorganizować klasy aby kod był testowalny jednostkowo?.
Chodzi mi głównie o przetestowanie zwyczajnego ifa if (File.Exists(filePath)
powiedzmy mam klasę którą mogę zmockowac i coś tam zwracac przy wowołaniu LoadFile w testach.

class XDocumentLoader : IXDocumentLoader
{
     public XDocument LoadFile(string path) => XDocument.Load(path)
}

i druga klasa

class FileWrapper : IFileWrapper
{
     public bool FileExists(string path) => File.Exists(path)
}

i chciałbym zorbić test w zalezności od FileExists. Co generalnie jest proste. Mockuje sobie IFileWrapper oraz IXDocumentLoader i jeśli IFileWrapper zwróci true to wywołuje ładowanie pliku a jeśli nie to nie ładuje pliku i zwracam powiedzmy nulla.

I w sumie tak mogło by być ale zastanawia mnie ten XDocumentLoader, który rzuci exceptionem jeśli ktos go wywoła bez FileExists.

Czy może za bardzo kombinuje i kod jest zbyt prosty aby go testować jednostkowo?

0

Tutaj nie masz nic do testowania. Chcesz testować chyba framework.

1

Skoro mockujesz IFileWrapper który sprawdza czy plik istnieje, to jaki Twoim zdaniem jest sens testować kod sprawdzający czy plik istnieje, jeśli w rzeczywistości ten kod nie będzie istniał (bo będzie zmockowany)? Innymi słowy- jeśli kod korzystający z IFileWrapper nie sprawdza czy plik istnieje, ani nic innego z tym faktem nie robi, to nie masz co testować w tym przypadku.

0

@Aventus:
Tzn chodziło mi bardziej o test w stylu jeśli mock IFileWrapper zwróci true to sprawdzam czy wowołyana jest motoda wczytująca plik. (LoadFile) A jeśli zwróci false to nie ma być wywoływana.
Co sprowadzało by się pewnie do tego, że musiałbym mieć 3 klase np FileContext która zwróci null lub XDocument w zależności od tego czy plik istnieje

0

Rozumiem, czyli w tym przypadku mowa nie o testowaniu IXDocumentLoader czy IFileWrapper, tylko o testowaniu kodu który z tego korzysta. A jeśli tam wykonujesz takie sprawdzanie, to testowanie tego ma sens- zakładając że uważasz taki rodzaj unit testów za sensowne ogólnie :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1