1

MvcContrib のテスト ヘルパーと Rhino Mocks 3.5 を使用して、ASP.NET MVC アクション メソッドをテストしています。次のように偽のコントローラーを作成します。

var _builder = new TestControllerBuilder();
_builder.InitializeController(_controller);

そのため、偽の HTTP サーバーなどを含む偽のコントローラーを取得します。

次に、 Server.MapPath メソッドを次のようにスタブしようとしています

controller.Server.Stub(x => x.MapPath(Arg<string>.Is.Anything)).Return("/APP_DATA/Files/");

しかし、テスト中の私のメソッドでは、 Server.MapPath("/APP_DATA/Files/") への呼び出しは null を返します。

これがテストです

    const string STOCK_NUMBER_ID = "1";
    const string FULL_FILE_PATH = "App-Data/Files";

    var controller = CreateStockController();
    _uploadedFileTransformer.Stub(x => x.ImageBytes).Return(new byte[10]);
    _uploadedFileTransformer.Stub(x => x.ConvertFileToBytes(FULL_FILE_PATH)).Return(true);

    controller.Server.Stub(x => x.MapPath(Arg<string>.Is.Anything)).Return("/App_Data/Files/");

    controller.AddImage(Guid.NewGuid(), STOCK_NUMBER_ID);

私は何が欠けていますか?

4

2 に答える 2

1

古い投稿ですが、私はこれを探していて、解決策を見つけました。MvcContribのTestHelperは、私にとっては機能しているため、おそらく修正されました。

_builder.HttpContext.Server.Stub(s => s.MapPath("~/" + filepath)).Repeat.Once().Return(mapedPath);
于 2010-12-06T19:09:56.447 に答える
0

これは MVCContrib のバグのようです (少なくとも、私のマシンにあるもの -- v1.0.0.0 では)。コントローラー コンテキストを設定するとき、Rhino.Mocks の記録/再生モードを使用していますが (これがバグです)、HttpServer モックを再生モードにしません。他のすべてを再生モードにしますが、それはしません。

したがって、簡単な修正は次のとおりです。

controller.Server.Replay();

テストの「配置」セクションの一部として。その後、正常に動作します。

于 2010-07-15T13:27:07.400 に答える