Frage

Wie würden Sie FTPWebRequest und FTPWebResponse über MOQ einem Unit-Test unterziehen?

Keine korrekte Lösung

Andere Tipps

Sie können nicht verspotten ftpwebrequest oder ftpweebresponse mit MOQ, da es Ihnen nur möglich ist, Schnittstellen zu schätzenoder abstrakte Klassen.Und es sieht nicht aus, als würde Frau über die Testbarkeit nachgedacht, wenn sie den größten Teil des System.net-Namespace schrieb.Das ist der Hauptgrund, warum ich mich von Moq an Rhinomlocks weggezogen habe.

Sie müssen Ihre eigenen FTPWEB-Objekte aufbauen und an Ihren Handler weitergeben.

Mit Mock auch nicht möglich, weil FTPWebResponse Es sind keine Konstruktoren verfügbar, mit denen etwas daraus abgeleitet werden kann.

So habe ich meinen Test in einer ähnlichen Situation geschrieben.

Zu testende Methode: ExceptionContainsFileNotFound(Exception ex)enthält folgende Logik:

if (ex is WebException)
{
    var response = (ex as WebException).Response;
    if (response is FtpWebResponse)
    {
        if ((response as FtpWebResponse).StatusCode == FtpFileNotFoundStatus)
        {
            return true;
        }
    }
}

Um es zu testen, habe ich einen schnellen Trick implementiert.

try
{
    var request = WebRequest.Create("ftp://notexistingfptsite/");
    request.Method = WebRequestMethods.Ftp.ListDirectory;

    request.GetResponse();
}
catch (WebException e)
{
    // trick :)
    classUnderTest.FtpFileNotFoundStatus = FtpStatusCode.Undefined;

    var fileNotFoundStatus = classUnderTest.ExceptionContainsFileNotFound(e);

    Assert.That(fileNotFoundStatus, Is.True);
}

(Natürlich ist FtpFileNotFoundStatus nicht der Welt zugänglich.)

Dafür verwende ich Rhino-Framework.

Es kann die Instanz-Erstellung verarbeiten, auch wenn es keinen öffentlichen Konstruktor gibt, lesen Sie nur Eigenschaften und mehr.

Beispiel: generasacodicetagpre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top