質問

MOQを介してFTPWebRequestとFTPWebResponseをどのようにテストしますか。

正しい解決策はありません

他のヒント

あなたはmock ftpwebRequest または ftpwebresponse モックインターフェイスのみを許可するだけなのでまたは抽象クラス。そして、MSがSystem.Netネームスペースの大部分を書き留めたときにテスト可能性について考えていたように見えませんでした。それが私がMOQから雑音に移動した主な理由です。

独自のFTPWeb *オブジェクトを構築し、それらをハンドラに渡す必要があります。

FTPWebResponseには、それから何かを派生させることができるようにコンストラクタが露出していないため、Mockでは不可能です。

これは私が同様の状況で私のテストを書いた方法です。

テスト中の方法:ExceptionContainsFileNotFound(Exception ex). 以下の論理を含みます:

if (ex is WebException)
{
    var response = (ex as WebException).Response;
    if (response is FtpWebResponse)
    {
        if ((response as FtpWebResponse).StatusCode == FtpFileNotFoundStatus)
        {
            return true;
        }
    }
}
.

それをテストするために私はクイックトリックを実装しました。

try
{
    var request = WebRequest.Create("ftp://notexistingfptsite/");
    request.Method = WebRequestMethods.Ftp.ListDirectory;

    request.GetResponse();
}
catch (WebException e)
{
    // trick :)
    classUnderTest.FtpFileNotFoundStatus = FtpStatusCode.Undefined;

    var fileNotFoundStatus = classUnderTest.ExceptionContainsFileNotFound(e);

    Assert.That(fileNotFoundStatus, Is.True);
}
.

(もちろんFTTFILenotFoundStatusは世界にさらされていません)

それは私がRhinoフレームワークを使う。

パブリックコンストラクタがない場合はインスタンス作成を処理できます。読み取り専用プロパティなど。

例:

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top