testy jednostkowe w Visual Studio 2015 metod FTP

0

Cześć. potrzebuję wykonać testy jednostkowe metody wysyłającej plik na serwer FTP w C# Visual Studio 2015. Nie bardzo wiem jak się jak się do tego zabrać. może jakaś podpowiedź naprowadzająca by mi pomogła. dzięki. DeNiss

0

dla poniższej metody:

        //
        #region upload - symulator wysyłka plików VAN-1.txt na serwer do katalogu głównego
        /// <summary>
        /// Method to upload the specified file to the specified FTP Server
        /// </summary>
        /// <param name="filename">file full name to be uploaded</param>
        private void Upload(string filename)
        {
            FileInfo fileInf = new FileInfo(filename);
            string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name;
            FtpWebRequest reqFTP;
            //
            // Create FtpWebRequest object from the Uri provided
            //   reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/baba-1/" + fileInf.Name));
            reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + fileInf.Name));
            //
            // Provide the WebPermission Credintials
            reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
            //
            // By default KeepAlive is true, where the control connection is not closed
            // after a command is executed.
            reqFTP.KeepAlive = false;
            //
            // Specify the command to be executed.
            reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
            //
            // Specify the data transfer type.
            reqFTP.UseBinary = true;
            //
            // Notify the server about the size of the uploaded file
            reqFTP.ContentLength = fileInf.Length;
            //
            // The buffer size is set to 2kb
            int buffLength = 2048;
            byte[] buff = new byte[buffLength];
            int contentLen;
            //
            // Opens a file stream (System.IO.FileStream) to read the file to be uploaded
            FileStream fs = fileInf.OpenRead();
            //
            try
            {
                // Stream to which the file to be upload is written
                Stream strm = reqFTP.GetRequestStream();
                //
                // Read from the file stream 2kb at a time
                contentLen = fs.Read(buff, 0, buffLength);
                //
                // Till Stream content ends
                while (contentLen != 0)
                {
                    // Write Content from the file stream to the FTP Upload Stream
                    strm.Write(buff, 0, contentLen);
                    contentLen = fs.Read(buff, 0, buffLength);
                }
                //
                // Close the file stream and the Request Stream
                strm.Close();
                fs.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "SymulatorPlikówVAN1 - metoda: Upload");
                //
                zxc.Nytec02ExceptionRaport("018-Symulator Plików VAN", "01-Upload()", zo.licznikRestartówProgramu);
                //
            }
        }
        #endregion
        //
0

moje zapytanie dla podanej metody wysyłającej pliki na serwer FTP jest przewrotne w ten sposób, iż metoda ta działa poprawnie i niezbyt czuję potrzebę jej testowania za pomocą testów jednostkowych - narzędzia w Visual Studio. Jednakże ja w następnym zapytaniu podam drugą metodę pobierającą z tego serwera FTP te pliki na lokalny komputer i wówczas już przewiduję będzie rzeczywista potrzeba dla testów jednostkowych z tym zastrzeżeniem, iż nie wiem kompletnie jak tą metodę tj. na jakie okoliczności miały by być testy jednostkowe, ponieważ metoda wyżej pokazany kod poprawnie działa ale czy na pewno ? jak i gdzie te widełki ustawić aby taką metodę sieciową testować za pomocą wymienionego narzędzia Visual Studio bowiem nigdzie w Internecie nie mogę znaleźć pasującej podpowiedzi. dzięki DeNiss

0

przed chwilą wykonałem na potrzeby tego zapytania w nowym projekcie Console wysyłkę przykładowego pliku na serwer FTP
wynik bez połączenia z Internetem był: Bad
po połączeniu z Internetem uzyskałem wynik: OK
to oznacza iż plik testowy został poprawnie wysłany na serwer FTP

nie chce mi się sprawdzać tego za pomocą np. CuteFTP
jednakże ja jestem pewien, iż metoda rzeczywiście poprawnie wysyła pliki na serwer

zapytanie moje nadal podtrzymuję:
jak tą metodę Upload() może nie tyle jak ją umieścić w pliku dll a jakie testy dla tej metody należałoby wykonać

udzielenie mi podpowiedzi spowoduje iż będę mógł przejść do innej metody pobierającej ten plik z serwera i moje właściwe już zapytanie czy testy jednostkowe są w ogóle poprawnym właściwym narzędziem do tego i ewentualnie podpowiedź jak te dwie metody sieciowe solidnie miałbym przetestować za pomocą wymienionych testów jednostkowych...

            //
            //using System.Net;// 
            //using System.IO;//                      
            //
            /*
       string ftpServerIP;// "192.168.1.21";
       string ftpUserID;  // "administrator";
       string ftpPassword;// "xxxxx";
       /**/
            //     static void Main(string[] args)
            //{
            /*
            ftpServerIP = "192.168.1.21";
            ftpUserID = "administrator";
            ftpPassword = "xxxxx";
            /**/
            //
            string filenamex = @"C:\aa.txt";// jakiś plik z przykładową zawartością 
            //
            bool d = Upload(filenamex);
            //
            if (d)
                Console.WriteLine("OK");
            else
                Console.WriteLine("Bad");
            //
            Console.ReadLine();
        }
        //
        //
        #region upload - symulator wysyłka plików VAN-1.txt na serwer do katalogu głównego
        /// <summary>
        /// Method to upload the specified file to the specified FTP Server
        /// </summary>
        /// <param name="filename">file full name to be uploaded</param>
        static private bool Upload(string filename)
        {
            FileInfo fileInf = new FileInfo(filename);
            string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name;
            FtpWebRequest reqFTP;
            //
            // Create FtpWebRequest object from the Uri provided
            //   reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/baba-1/" + fileInf.Name));
            reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + fileInf.Name));
            //
            // Provide the WebPermission Credintials
            reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
            //
            // By default KeepAlive is true, where the control connection is not closed
            // after a command is executed.
            reqFTP.KeepAlive = false;
            //
            // Specify the command to be executed.
            reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
            //
            // Specify the data transfer type.
            reqFTP.UseBinary = true;
            //
            // Notify the server about the size of the uploaded file
            reqFTP.ContentLength = fileInf.Length;
            //
            // The buffer size is set to 2kb
            int buffLength = 2048;
            byte[] buff = new byte[buffLength];
            int contentLen;
            //
            // Opens a file stream (System.IO.FileStream) to read the file to be uploaded
            FileStream fs = fileInf.OpenRead();
            //
            try
            {
                // Stream to which the file to be upload is written
                Stream strm = reqFTP.GetRequestStream();
                //
                // Read from the file stream 2kb at a time
                contentLen = fs.Read(buff, 0, buffLength);
                //
                // Till Stream content ends
                while (contentLen != 0)
                {
                    // Write Content from the file stream to the FTP Upload Stream
                    strm.Write(buff, 0, contentLen);
                    contentLen = fs.Read(buff, 0, buffLength);
                }
                //
                // Close the file stream and the Request Stream
                strm.Close();
                fs.Close();
                //
                return true;
            }
            catch (Exception ex)
            {
                Console.WriteLine("exception: " + ex.ToString());
                //
                return false;
            }
        }
        #endregion
        //
0

może pytam w pierwszej kolejności czy za pomocą narzędzia testy jednostkowe w Visual Studio da się przetestować procedurę sieciową... jak zawarta w tej przykładowej metodzie Upload(). W tej chwili ja i tak zamierzam umieścić ją i wszystkie pozostałe w pliku dll jednakże mając plik dll zastanawiam się w tym momencie czy wymienione narzędzie służy lub może inaczej czy może być użyteczne do testów procedury sieciowej... dzięki za jakąś podpowiedź. DeNiss

0

nieeeee no a niech to !

pokażę Wam Lars Powers VS2010 Helion:
dają cały rozdział za darmo...

ja mam ponadto całą książkę za 200 PLN drukowaną

nie chciało mi się lub nieco gorzej nie mam pojęcia jak to mam zrobić

ponieważ mam hosting FTP wykupiony jednakże bez obsługi ASP !

i łudziłem się jakoby Ktoś mi zechciał pomóc...

a może jednak Ktoś w ten Sobotni wieczer może jednak mi jeszcze podpowie co interesującego w przedstawionym zapytaniu ?

w każdym razie to jest wskazówka na tym Forum aby inni młodzi Koledzy jednakże mieli jakiś pożytek, wskazówkę

bowiem mnie przeraża nazbyt duża liczba postów bez konstruktywnego zakończenia...

0

sprawdziłem czy jeszcze dają ten rozdział przykładowy właśnie na temat testów jednostkowych...

dają: http://helion.pl/ksiazki/microsoft-visual-studio-2010-ksiega-eksperta-mike-snell-lars-powers,vs21ke.htm#szczegoly

załączam obrazek

1

Testy jednostkowe służą do testowania fragmentów kodu - metod, klas, zestawów klas, które da się w jakiś sposób uznać za "jednostkę" i odizolować od reszty aplikacji oraz systemów zewnętrznych. Testy jednostkowe dotyczą wyłącznie kodu, nigdy operacji dyskowych, bazodanowych, sieciowych, itd.
Testy wysyłania i pobierania na serwer FTP to nie są testy jednostkowe tylko integracyjne. I szczerze mówiąc nie widzę żadnego sensu testowania czegoś takiego. Bo co taki test da? Co najwyżej przetestuje dostęp do sieci, nie kod.

0

dzięki za podpowiedź... ja jużem sobie przypomniał:
Praktyczna analiza pakietów_ Wykorzystanie narzędzia Wireshark do rozwiązywania problemów z siecią - Książka, kurs - Chris Sanders - Wydawnictwo Helion, księgarnia internetowa informatyczna helion_pl

i nawet Helion dawał przykładowy rozdział: panpak.pdf

i korzystając z okazji dopytam może czy dobrze w kierunku właściwym podąża moje myślenie...
Gdyby Kolega mógł mi chociaż jeszcze w jednym zdaniu czy to jest właściwy trop

a może w Visual Studio jest jakieś narzędzie o którym nie wiem do takich testów na linii pomiędzy kodem na komputerze lokalnym w programie desktopowym a serwerem w kwestii wymiany plików... jak to dobrze przynajmniej jakoś próbuję ogarnąć co ja potrzebuję i nazwać to... bo może z mojego zapytania nie było wiadomo o co mi chodzi... już teraz dzięki za ewentualną podpowiedź DeNiss

0

na załączonym obrazku jest fragment z książki Lars Powers VS2010 Helion dotyczy testowania Web / ASP.NET w Visual Studio i muszę nieco jednak poczytać ponieważ ja nie mam dostępu do technologii ASP.NET na wykupionym hostingu a jedynie do php Linux ?! tak więc zastanawiam się czy coś mi z tego byłoby pomocne. Przyznam, iż ja zaawansowanym programistą nie jestem w związku z czym nie ogarniam całości zagadnień, których bym potrzebował i w tym głównie upatruję większości nurtujących mnie problemów zapewne i tu się mogę zgodzić z tych absolutnie podstawowych i ja się na takie określenie nie pogniewam i proszę jedynie o wyrozumiałość. widzę wielu dopiero co początkujących Kolegów i to mnie jedynie nieco pociesza, iż mogę jednakże liczyć na jakieś zrozumienie na tym Forum. DeNiss

0

obrazka zapomniałem dodać - bardzo przepraszam

0

dobrze jednak początkowo myślałem...w podanej metodzie Upload() jest wiele elementów, które są niepewne i należałoby je rzeczywiście testować w testach jednostkowych w środowisku Visual Studio na lokalnym komputerze.
Zasadniczo chodzi mi o inną metodę w której jest zawarta procedura pobierania plików z serwera, a w niej jest problem z często zdarzającą mi się sytuacją: plik zip pobierany z serwera nie jest pobierany ponieważ najpierw jest tworzony taki pusty plik na lokalnym komputerze we wskazanej lokalizacji i zdarza się, iż pozostaje on pusty po wykonaniu pobrania z serwera wymienionego typu .zip. dlatego zdecydowałem się najpierw zaprezentować metodę Upload() jako może wstęp do dyskusji na interesujący mnie temat abym coś w międzyczasie pojął ponieważ na Forum zauważyłem jakoby Koledzy nieraz bardzo mocno zaawansowani w wypowiedziach coś powiedzą czego ja nadal nie zrozumiałem... wracając do mojego problemu ja rozumiem, iż testy jednostkowe są w miejscu czyli w środowisku VS na jakiś przykładowych łańcuchach a bardziej liczby można jako wartości skrajne tzw. widełki... i właśnie ta druga metoda pobierająca pliki z serwera ja wyposażyłem ją w minimalną wielkość objętość wagę pliku i jeśli jest minimum 500 bajtów to oznacza iż nastąpiło pobranie czyli skopiowanie pliku .zip z serwera do tego pustego jaki tworzy sama procedura dlatego poniżej jest ta druga metoda FTP na której bym chciał dokonać testów jednostkowych czy poprawnie będzie wyłapywanie tego momentu w trakcie ewentualnych problemów i właśnie niezbyt to ograniam czy to serwer czy ta metoda generuje błąd jakiś uniemożliwiający zawsze pobranie czyli skopiowanie pliku .zip z serwera i to jest powodem mojego zainteresowania testami jednostkowymi w pierwszej kolejności jako wstępem do poznania tego narzędzia w Visual Studio.
poniżej kod drugiej z metod FTP: ( której kod chciałbym off-line sprawdzić )

dzięki za wszelką pomoc

 public void Download(string filePath, string fileName)
        {// Simple FTP demo application using C#_Net 2_0 - CodeProject
            //bool pobrano = false;
            //
            FtpWebRequest reqFTP;
            try
            {
                //filePath = <<The full path where the file is to be created.>>, 
                //fileName = <<Name of the file to be created(Need not be the name of the file on FTP server).>>
                FileStream outputStream = new FileStream(filePath + "\\" + fileName, FileMode.Create);
		// tworzy pusty plik o wskazanej nazwie w listBox
                //
                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + fileName));
		//
                reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
                reqFTP.UseBinary = true;
                reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
                //
                bool ff = true; 
                string e = ff.ToString();
                //
                FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
                Stream ftpStream = response.GetResponseStream();
                long cl = response.ContentLength;
                //
                if (cl < 500)
                    return;
                //
                int bufferSize = 2048;
                int readCount;
                byte[] buffer = new byte[bufferSize];
                //
                readCount = ftpStream.Read(buffer, 0, bufferSize);
                while (readCount > 0)
                {
                    outputStream.Write(buffer, 0, readCount);
                    readCount = ftpStream.Read(buffer, 0, bufferSize);
                }
                //
                //  ftpStream.
                ftpStream.Close();
		//
                long ccc = outputStream.Length;
                outputStream.Close();
                response.Close();
                //
                // pobrano = true;
            }
            catch (Exception ex)
            {
  		return pobrano;
            }
            //  return pobrano;
        }
0

niech będzie to dopowiedziane, iż na przykładzie tych metod FTP ja chcę nauczyć się w końcu czyli dociec prawie samodzielnie co jest powodem serwer czy kod w tych metodach jakiś niedorobiony... skutkiem czego czasem zdarza się do utworzonego lokalnie pliku .zip nie zostaje skopiowana zawartość pliku z serwera... i właśnie przez skórę to czuję, jakoby dało się sporo na tym problemie abym wreszcie pojął tak praktycznie... powiedzmy rolnik z Okinawy jestem licząc na wsparcie Kolegów pozdrawiam Wszystkich DeNiss

0

Zaloguj gdzieś do pliku na dysku treść przechwyconego wyjątku, to się dowiesz, co jest nie tak. Tego nie ma sensu testować.

0

ja zbiorczo z każdego wyjątku czy awarii automatycznie generowane mam pliki raportów, dzięki czemu kilka godzin program sam automatycznie pracuje wysyłając i pobierając tysiące plików testowych na serwer bywa, iż po kilka godzin dziennie tak sam automatycznie pracuje za dnia lub w nocy...
tym niemniej wyczytałem doczytałem, jakoby z lenistwa programiści używają testów jednostek aby szybko i sprawnie oraz zdecydowanie w bardziej pełny i dający jakąś pewność sposób to czynią z czym ja niestety zmagam się jakoby bezskutecznie, ponieważ wciąż mi wyskakują błędy w różnych momentach. Dlatego nie z lenistwa a z chęci poznania wartościowych narzędzi wbudowanych w Visual Studio ja bym chciał zacząć normalnie wreszcie korzystać i ten wczorajszy wątek w tym celu utworzyłem, aby ogarnąć od czego powinienem rozpocząć... Powiedzieć należy, iż posiadaczem jestem Lars Powers VS2010 to jednak aby rozpocząć przerobienie rozdziału 9 poświęconego testom jednostek należy przerobić ręcznie około pół księgi ponieważ autor nie dostarczył kodu i w tym miejscu muszę niestety pożalić się iż wszystkie księgi jakie posiadam a trochę tego mam z serii czarnych ksiąg i ogólnie w twardych okładkach... to cholera mnie bierze kiedy muszę jeszcze szukać ręcznie i składać ręcznie kod z kolejnych rozdziałów zanim dotrę do interesującego mnie akurat miejsca w środku księgi... Rozpacz moja jest wielka z tego powodu i poniekąd myślałem, iż Ktoś mi taki kod by może i kawałek chociaż podrzucił... na tym Forum... może wreszcie przez te Święta wezmę się wreszcie do zgłębiania tej interesującej lektury ja nie idę na żadną łatwiznę CO TO TO NIE !
w każdym razie dzięki, iż mogłem się choć trochę tutaj wyżalić...jak ciężko jest lekko żyć. Pozdrowienia DeNiss

0

Mistrz Yoda byłby zazdrosny.
Jeśli zależy Ci na przetesowaniu kodu wykorzystującego zewnętrzne biblioteki, opakuj je w kontrakty których nie będziesz testował i skorzystaj z DI.

0
Wybitny Szczur napisał(a):

Mistrz Yoda byłby zazdrosny.
Jeśli zależy Ci na przetesowaniu kodu wykorzystującego zewnętrzne biblioteki, opakuj je w kontrakty których nie będziesz testował i skorzystaj z DI.

jam jedynie początkujący programista amator rolnik z Okinawy
ja nie kumam co o jest DI...

przystąpiłem do testów jednostkowych jednakże rozumiem, iż problem może być nawet na serwerze FTP
póki co chcę przetestować metody zaprezentowane FTP by obsługiwały w pętli wielokroć ponowienie pobrania tego pliku zip
po chwili pauzy... jednakże interesuje mnie dlaczego nie mogę z serwera szybko pobierać plików i szybko inne akcje php wykonywać na serwerze FTP i muszę wprowadzać pauzy...

czy jest to wina moich metod zawierających procedury FTP oraz php czy jakieś ograniczenia na serwerze
mam hosting na home.pl podobno szybki jak cholerka...o dlaczego pytam i się co zacina ??? i to muszę sprawdzić na ile się da a póki co mam sporo wytrychów i wyskakują mi błędy czy awarie...

tak więc chwilowo przyglądam się metodom zaprezentowanym wyżej aby coś zaradzić... we własnym zakresie Mój klient poczeka na nagrodę te 5 minut zwłoki jestem tego pewien... a na tyle mniej więcej mam różnych pauz w kodzie tylko skoro serwer home.pl podają jaki ogromnie teraflopsy jakie mi podają szybkości to dlaczego mi się zacina i muszę te pauzy pomiędzy operacjami serwerowymi wprowadzać... pytań jak zwykle sporo jednakże silnik usługi działa dość solidnie po kilku miesiącach naprawdę bezlitosnych testów... pozdrawiam DeNiss

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.