首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建假FtpWebResponse

如何创建假FtpWebResponse
EN

Stack Overflow用户
提问于 2014-10-09 15:20:14
回答 2查看 684关注 0票数 1

我试图为集成测试伪造一个FtpWebRequest.GetResponse(),但不使用服务器。我一直试图做的是简单地返回一个假的FtpWebResponse,但是,您不允许访问FtpWebResponse的构造函数,因为它是内部的。

这是我的代码:

生产代码:

代码语言:javascript
复制
            using (FtpWebResponse response = (FtpWebResponse) ftpWebRequest.GetResponse())
            {
                ftpResponse = new FtpResponse(response.StatusDescription, false);
            }

测试假的,我试图用它来返回一个假的FtpWebResponse:

代码语言:javascript
复制
            ShimFtpWebRequest.AllInstances.GetResponse = request =>
            {
                FtpWebResponse ftpWebResponse= new FtpWebResponse(/*parameters*/); // not allowed because it is internal
                ftpWebResponse.StatusDescription="blah blah blah";
                return ftpWebResponse;
            };

最后,我想要做的就是返回一个假的ftpWebResponse,以便在我的测试中断言。有什么想法吗?谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-09 16:47:27

找到答案了。如果您访问FtpWebResponse,它将允许构造函数:

代码语言:javascript
复制
        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);
票数 1
EN

Stack Overflow用户

发布于 2018-02-28 18:16:32

犀牛框架可以做到这一点。它可以由Nuget添加:

示例:

代码语言:javascript
复制
var ftpWebResponse = Rhino.Mocks.MockRepository.GenerateStub<FtpWebResponse>();
ftpWebResponse.Stub(f=>f.StatusCode).Return(FtpStatusCode.AccountNeeded);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26282143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档