尝试使用MvcContrib测试助手和Rhino Mocks 3.5来存根Server.MapPath

时间:2010-07-14 16:21:04

标签: rhino-mocks mvccontrib-testhelper

我正在使用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);

我缺少什么?

2 个答案:

答案 0 :(得分:1)

老帖子但是我正在寻找这个并且我找到了一个解决方案,MvcContrib的TestHelper可能已经修复了,因为对我而言它正在发挥作用。

_builder.HttpContext.Server.Stub(s => s.MapPath("~/" + filepath)).Repeat.Once().Return(mapedPath);

答案 1 :(得分:0)

看起来这是MVCContrib中的一个错误(至少我在我的机器上有什么 - v1.0.0.0)。在设置控制器上下文时,它使用的是Rhino.Mocks记录/重放模式,但是(这就是错误),它不会将HttpServer模拟放入重放模式。它将其他所有内容置于重放模式但不是那个。

所以快速修复就是:

controller.Server.Replay();

作为测试“安排”部分的一部分。然后它工作正常。