【问题标题】:How to create a fake FtpWebResponse如何创建一个假的 FtpWebResponse
【发布时间】:2014-12-04 14:28:57
【问题描述】:

我试图伪造一个 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 以在我的测试中进行断言。有任何想法吗? 谢谢

【问题讨论】:

    标签: c# ftpwebrequest microsoft-fakes ftpwebresponse


    【解决方案1】:

    找到了答案。如果您填充 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);
    

    【讨论】:

    • 需要注意的是,这个答案需要Visual Studio Premium或更高版本。有一个名为 Prig 的替代方案,我没有使用它可能会有所帮助,但否则这应该被视为一个 高级解决方案,它并不适用于所有人。
    • 另外需要注意的是需要添加System.fakes文件。 stackoverflow.com/questions/26914058/…
    【解决方案2】:

    Rhino 框架可以做到。并且可以通过 Nuget 添加:

    例子:

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

    【讨论】:

      猜你喜欢
      • 2012-09-07
      • 2011-12-09
      • 1970-01-01
      • 1970-01-01
      • 2014-05-17
      • 2023-03-31
      • 2016-05-10
      • 1970-01-01
      • 2017-10-10
      相关资源
      最近更新 更多