• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed C# - sprawdzanie czy kod poprawnie zapisuje tekst do pliku

Object Storage Arubacloud
0 głosów
244 wizyt
pytanie zadane 6 maja 2020 w C# przez dawid2002 Mądrala (5,190 p.)
zamknięte 6 maja 2020 przez dawid2002

Witam! Ostatnio piszę sobie pewien program, w którym fragment kodu jest odpowiedzialny za zapisywanie tekstu do pliku. Chciałbym przetestować jednostkowo ten kod, który używa StreamWriter. W internecie znalazłem takie rozwiązanie (ze względu na moje własne potrzeby trochę to zmieniłem):

using (var stream = new MemoryStream())
using (var writer = new StreamWriter(stream))
{
    writer.Write("text");
 
    string actual = Encoding.UTF8.GetString(stream.ToArray());
    Assert.AreEqual("text", actual);
}

Kiedy odpalam test to okazuje się że zmienna "actual" jest pustym string'iem a nie "text".

Moje pytanie jest takie: Co trzeba zmienić w powyższym kodzie, aby sprawdzał on czy poprawnie jest zapisywany tekst do pliku (zapisujemy tutaj "text" do pliku więc jak sprawdzić, że to jest zapisane)? Lub też może być całkiem inny sposób niż ten powyżej.

Z góry dziękuje za pomoc!

PS.

Przepraszam, że znowu zadaje te pytanie, ale ostatnio nikt nie odpowiedział.

komentarz zamknięcia: Znam już odpowiedź do pytania

2 odpowiedzi

0 głosów
odpowiedź 6 maja 2020 przez adrian17 Ekspert (344,860 p.)
wybrane 6 maja 2020 przez dawid2002
 
Najlepsza

Na oko, zabrakło flusha writera. Więc albo wywołaj Flush():

writer.Write("text");
writer.Flush();

Albo użyj MemoryStream dopiero po zamknięciu Writera:

                using (var writer = new StreamWriter(stream))
                {
                    writer.Write("text");
                }
                string actual = Encoding.UTF8.GetString(stream.ToArray());

inna sprawa, że... dlaczego to testujesz w unit teście? :P To wygląda, jakbyś testował już przetestowaną bibliotekę standardową. A przecież pisanie tekstu do pliku to w najprostszym wariancie (bez Streamów) w zasadzie jedna linia kodu. IMO lepiej odizolować kod generujący tekst (i go przetestować w unit teście) od linijki piszącej do pliku (którą raczej powinno się testować w testach integracyjnych).

komentarz 6 maja 2020 przez dawid2002 Mądrala (5,190 p.)
Wielkie dzięki! Ten kod co jest w pytaniu, to nie ja napisałem, wziąłem go ze stacka.

Poza tym, serio da się bez użcyia streamów zapisać coś do pliku? Pierwszy raz coś takiego widzę.
komentarz 6 maja 2020 przez adrian17 Ekspert (344,860 p.)

Jasne, po prostu

File.WriteAllText("file.txt", "costam");

(jest też kilka podobnych metod do pisania/czytania tekstu/linii.)

https://docs.microsoft.com/en-us/dotnet/api/system.io.file?view=netcore-3.1#methods

komentarz 6 maja 2020 przez dawid2002 Mądrala (5,190 p.)

Dzięki yes

0 głosów
odpowiedź 6 maja 2020 przez areklipno Stary wyjadacz (11,930 p.)

Wg mnie możesz zrobić stream writter do pliku, a potem stream readerem odczytać zawartość pliku.

string testtext = "przykladowa tresc";
string filepaht = "C:\twojasciezka.txt";
using (var writer = new StreamWriter(filepaht ))
{
    writer.Write(testtext);
}
string odczytany  = "";
using ( var reader = new StreamReader( filepaht ) )
{
odczytany =  reader.Read();
}

 Assert.AreEqual(testtext, odczytany);


Jeśli nie chcesz tak możesz próbować inaczej. Najważniejsze, żeby zamknąć writtera bo inaczej nie zdąży on zachować informacji w pliku. Wypadałoby również ten plik usunąć po porównaniu.

 

PS. Jeśli są błędy w składni to przepraszam - pisałem z głowy, bez możliwości przetestowania

 

komentarz 6 maja 2020 przez dawid2002 Mądrala (5,190 p.)
Ale czy wypada, żeby podczas testu jednostkowego tworzyć pliki i pracować na nich zamiast operować na atrapach?

Podobne pytania

0 głosów
0 odpowiedzi 419 wizyt
pytanie zadane 19 kwietnia 2020 w C# przez dawid2002 Mądrala (5,190 p.)
0 głosów
0 odpowiedzi 149 wizyt
pytanie zadane 20 marca 2020 w C# przez dawid2002 Mądrala (5,190 p.)

92,555 zapytań

141,403 odpowiedzi

319,554 komentarzy

61,939 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...