Я пытаюсь подделать 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 для утверждения в моем тесте. Есть идеи? благодаря
Нашел ответ. Если вы закроете 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);
Rhino framework может это сделать. И он может быть добавлен Нугэтом:
Пример:
var ftpWebResponse = Rhino.Mocks.MockRepository.GenerateStub<FtpWebResponse>();
ftpWebResponse.Stub(f=>f.StatusCode).Return(FtpStatusCode.AccountNeeded);