我正在使用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);
我缺少什么?
答案 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();
作为测试“安排”部分的一部分。然后它工作正常。