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 回答