• 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

0 głosów
65 wizyt
pytanie zadane 6 maja 2020 w C# przez dawid2002 Mądrala (5,140 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 (306,580 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,140 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 (306,580 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,140 p.)

Dzięki yes

0 głosów
odpowiedź 6 maja 2020 przez areklipno Dyskutant (9,990 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,140 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 112 wizyt
pytanie zadane 19 kwietnia 2020 w C# przez dawid2002 Mądrala (5,140 p.)
0 głosów
0 odpowiedzi 77 wizyt
pytanie zadane 20 marca 2020 w C# przez dawid2002 Mądrala (5,140 p.)

86,448 zapytań

135,207 odpowiedzi

300,348 komentarzy

57,196 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...