【发布时间】:2010-12-07 03:09:56
【问题描述】:
我正在使用 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);
我错过了什么?
【问题讨论】:
-
我们可以看看测试吗?看起来可能缺少 repository.Playback()。
-
我已将测试添加到 OP。我认为我们不需要在 Rhino Mocks v3.5 中使用录制和播放功能 - 我错了吗?
-
你也可以粘贴
CreateStockController()吗?我不熟悉您使用的测试助手,但是 controller.Server 是在哪里创建的? -
好点,事实上,经过进一步调查,我发现它没有被创建。我将如何创建它并作为我的假控制器的一部分出现?可能吗?我想知道为什么 MvcContrib Testhelpers 还没有这样做。
-
录制/播放不是必需的,但有些人仍然使用它。他们经常做一个记录(),但忘记执行回放()并且他们的存根/模拟不起作用。但是,我刚刚使用 MVCContrib 对示例 MVC 项目进行了测试,我看到了同样的情况——controller.Server 是 Rhino.Mocks 代理,但 MapPath 存根不起作用。我要去玩一玩,看看发生了什么。
标签: rhino-mocks mvccontrib-testhelper