Teste de unidade FTPWebRequest/FTpWebResponse
-
14-11-2019 - |
Pergunta
Como você testaria a unidade FTPWebRequest e FTPWebResponse por meio de MOQ.
Nenhuma solução correta
Outras dicas
Você não pode zombar de ftpwebrequest ou
Você precisará criar seus próprios objetos FTPWeb * e passá-los para o manipulador.
Não é possível com Mock também porque FTPWebResponse
não possui construtores expostos para permitir que algo seja derivado dele.
Aqui está como escrevi meu teste em situação semelhante.
Método em teste: ExceptionContainsFileNotFound(Exception ex)
contém a seguinte 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 testá-lo implementei um truque 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);
}
(É claro que FtpFileNotFoundStatus não está exposto ao mundo.)
Para isso eu uso o Rhino frameWork.
Ele pode lidar com a criação de instâncias mesmo se não houver um construtor público, propriedades somente leitura e muito mais.
Exemplo:
var ftpWebResponse = Rhino.Mocks.MockRepository.GenerateStub<FtpWebResponse>();
ftpWebResponse.Stub(f=>f.StatusCode).Return(FtpStatusCode.AccountNeeded);