Domanda

Come si verificherebbe il test ftpwebrequest e ftpwebesponse tramite MOQ.

Nessuna soluzione corretta

Altri suggerimenti

Non puoi schernire ftpwebrequest o ftpwebesponse con MOQ, perché ti consente solo di finta interfacceo classi astratte.E non sembra che MS stava pensando alla testabilità quando hanno scritto la maggior parte dello spazio dei nomi System.net.Questa è la ragione principale che mi sono allontanato da MOQ a Rhinomocks.

Dovrai costruire i tuoi oggetti ftpweb * e passarli al tuo gestore.

Non è possibile con derisione anche perché FTPWebResponse non ha costruttori esposti per consentire a qualcosa di derivarsi da esso.

Ecco come ho scritto il mio test in situazione simile.

Metodo sotto Test: ExceptionContainsFileNotFound(Exception ex) Contiene la seguente logica:

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

Per provarlo ho implementato 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);
}
.

(ovviamente ftpfilenotfoundstatus non è esposto al mondo.)

Per quello uso Rhino Framework.

Può gestire la creazione di istanze anche se non c'è un costruttore pubblico, le proprietà di lettura e altro ancora.

Esempio:

var ftpWebResponse = Rhino.Mocks.MockRepository.GenerateStub<FtpWebResponse>();
ftpWebResponse.Stub(f=>f.StatusCode).Return(FtpStatusCode.AccountNeeded);
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top