Модульное тестирование FTPWebRequest/FTpWebResponse
-
14-11-2019 - |
Вопрос
Как бы вы провели модульное тестирование FTPWebRequest и FTPWebResponse через MOQ.
Нет правильного решения
Другие советы
Вы не можете MOCK ftpwebrequest или
Вам нужно будет создать свои собственные объекты FTPWeb * и пропустите их в свой обработчик.
Невозможно с Mock еще и потому, что FTPWebResponse
не имеет конструкторов, позволяющих получить что-то из него.
Вот как я написал свой тест в аналогичной ситуации.
Тестируемый метод: ExceptionContainsFileNotFound(Exception ex)
содержит следующую логику:
if (ex is WebException)
{
var response = (ex as WebException).Response;
if (response is FtpWebResponse)
{
if ((response as FtpWebResponse).StatusCode == FtpFileNotFoundStatus)
{
return true;
}
}
}
Чтобы проверить это, я применил быстрый трюк.
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);
}
(Конечно, FtpFileNotFoundStatus не доступен миру.)
Для этого я использую Rhino Framework.
Это может справиться с созданием экземпляра, даже если нет общественного конструктора, прочитайте только свойства свойств и многое другое.
Пример:
var ftpWebResponse = Rhino.Mocks.MockRepository.GenerateStub<FtpWebResponse>();
ftpWebResponse.Stub(f=>f.StatusCode).Return(FtpStatusCode.AccountNeeded);
.