我试图为集成测试伪造一个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,以便在我的测试中断言。有什么想法吗?谢谢
发布于 2014-10-09 16:47:27
找到答案了。如果您访问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);发布于 2018-02-28 18:16:32
犀牛框架可以做到这一点。它可以由Nuget添加:
示例:
var ftpWebResponse = Rhino.Mocks.MockRepository.GenerateStub<FtpWebResponse>();
ftpWebResponse.Stub(f=>f.StatusCode).Return(FtpStatusCode.AccountNeeded);https://stackoverflow.com/questions/26282143
复制相似问题