Test dell'unità FTPWebRequest / ftpwebesponse
-
14-11-2019 - |
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);
.