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 を返したいだけです。何か案は?ありがとう

4

2 に答える 2

1

答えを見つけました。FtpWebResponse を Shim すると、コンストラクターが許可されます。

        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);
于 2014-10-09T16:47:27.727 に答える