Prueba unitaria FTPWebRequest/FTpWebResponse
-
14-11-2019 - |
Pregunta
¿Cómo realizaría una prueba unitaria de FTPWebRequest y FTPWebResponse a través de MOQ?
No hay solución correcta
Otros consejos
No se puede burlarse ftpwebrequest o
Tendrá que construir sus propios objetos FTPWEB * y pasarlos a su manejador.
No es posible con Mock también porque FTPWebResponse
no tiene constructores expuestos para permitir que se derive algo de él.
Así es como escribí mi prueba en una situación similar.
Método bajo prueba: ExceptionContainsFileNotFound(Exception ex)
contiene la siguiente lógica:
if (ex is WebException)
{
var response = (ex as WebException).Response;
if (response is FtpWebResponse)
{
if ((response as FtpWebResponse).StatusCode == FtpFileNotFoundStatus)
{
return true;
}
}
}
Para probarlo implementé un truco rápido.
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);
}
(Por supuesto, FtpFileNotFoundStatus no está expuesto al mundo).
para eso uso el marco de rinoceronte.
Puede manejar la creación de instancias incluso si no hay un constructor público, lea solo las propiedades y más.
Ejemplo:
var ftpWebResponse = Rhino.Mocks.MockRepository.GenerateStub<FtpWebResponse>();
ftpWebResponse.Stub(f=>f.StatusCode).Return(FtpStatusCode.AccountNeeded);