Как создать фальшивый FtpWebResponse

1

Я пытаюсь подделать FtpWebRequest.GetResponse() для теста интеграции, но без использования сервера. То, что я пытался сделать, это просто вернуть поддельный FtpWebResponse, но вам не разрешен доступ к конструктору для FtpWebResponse, потому что он является внутренним.

Вот мой код:

Производственный код:

            using (FtpWebResponse response = (FtpWebResponse) ftpWebRequest.GetResponse())
            {
                ftpResponse = new FtpResponse(response.StatusDescription, false);
            }

Тестовый подделка Я пытаюсь использовать для возврата поддельного FtpWebResponse:

            ShimFtpWebRequest.AllInstances.GetResponse = request =>
            {
                FtpWebResponse ftpWebResponse= new FtpWebResponse(/*parameters*/); // not allowed because it is internal
                ftpWebResponse.StatusDescription="blah blah blah";
                return ftpWebResponse;
            };

В конце концов, все, что я хочу сделать, это вернуть поддельный ftpWebResponse для утверждения в моем тесте. Есть идеи? благодаря

Теги:
ftpwebrequest
microsoft-fakes
ftpwebresponse

2 ответа

0
Лучший ответ

Нашел ответ. Если вы закроете FtpWebResponse, он позволит конструктору:

        FtpResponse response;

        using (ShimsContext.Create())
        {
            ShimFtpWebRequest.AllInstances.GetResponse = request => new ShimFtpWebResponse();
            ShimFtpWebResponse.AllInstances.StatusDescriptionGet = getDescritpion => "226 Transfer complete.";
            _ftpConnection.Put(_fileContent);
            response = new FtpResponse("226 Transfer complete.", false);
        }
        Assert.AreEqual(response.Message, "226 Transfer complete.");
        Assert.IsFalse(response.HasError);
  • 0
    Следует отметить, что этот ответ требует Visual Studio Premium или выше. Существует альтернатива под названием Prig, которую я не использовал, которая могла бы помочь, но в противном случае это следует рассматривать как решение премиум-класса, которое не будет работать для всех.
  • 0
    Следует также отметить, что необходимо добавить файл System.fakes. stackoverflow.com/questions/26914058/...
0

Rhino framework может это сделать. И он может быть добавлен Нугэтом:

Пример:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню