Question

Comment testeriez-vous FTPWeBRequest et FTPWEBRESPONSE via MOQ.

Pas de solution correcte

Autres conseils

Tu ne peux pas vous moquer Ftpwebrequest ou Ftpwebruponse avec le MOQ, car il vous permet uniquement de se moquer des interfaces ou des classes abstraites. Et il ne semble pas que MS pensait à la testabilité lorsqu'ils ont écrit la plupart de l'espace de noms System.net. C'est la principale raison pour laquelle j'ai déménagé du MOQ à Rhinomocks.

Vous devrez construire vos propres objets FTPWeb * et les transmettre à votre gestionnaire.

Pas possible avec simulé aussi parce que FTPWebResponse Les constructeurs n'ont pas de constructeurs exposés pour permettre à quelque chose d'être dérivé de celui-ci.

Voici comment j'ai écrit mon test dans une situation similaire.

Méthode sous test: ExceptionContainsFileNotFound(Exception ex)Contient la logique suivante:

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

Afin de le tester, j'ai implémenté Quick Trick.

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);
}

(Bien sûr, FTPFilenotFoundStatus n'est pas exposé au monde.)

Pour cela, j'utilise Rhino Framework.

Il peut gérer la création d'instances même s'il n'y a pas de constructeur public, de lecture uniquement des propriétés et plus encore.

Exemple:

var ftpWebResponse = Rhino.Mocks.MockRepository.GenerateStub<FtpWebResponse>();
ftpWebResponse.Stub(f=>f.StatusCode).Return(FtpStatusCode.AccountNeeded);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top