• 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

VPS Starter Arubacloud
0 głosów
239 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,100 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,100 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 406 wizyt
pytanie zadane 19 kwietnia 2020 w C# przez dawid2002 Mądrala (5,190 p.)
0 głosów
0 odpowiedzi 148 wizyt
pytanie zadane 20 marca 2020 w C# przez dawid2002 Mądrala (5,190 p.)

92,455 zapytań

141,263 odpowiedzi

319,099 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...