1

我是MVCContrib Testhelper的新手,嘲笑Rhino。MVCContrib TestHelper和User.Identity.Name,Server.MapPath和表單集合

我需要幫助單元測試依賴於User.Identity.Name,Server.MapPath和Form Collection的控制器。

我開始了與

var controller = new SubmitController(); 
var builder = new TestControllerBuilder(); 
builder.InitializeController(controller); 

我發現this post設置User.Identity.Name

controller.ControllerContext = TestHelper.MockControllerContext(controller).WithAuthenticatedUser("domain\\username"); 

在這一點上,在我的控制器我現在能夠得到的User.Identity 。問題就變成了如何設置Form Collection變量。設置

builder.Form.Add("testvar","1"); 

不再有效。看來,現在我必須通過

controller.HttpContext.Request.Form.Add("testvar","1) 

這似乎工作訪問,但在這一點上,我已不再使用上述生成器(TestControllerBuilder)。

然後我不得不嘲笑服務器,這引發了更多的問題。我怎樣才能繼續使用建設者而是用嘲笑或存根的HttpContext,HttpRequest的,服務器等等,我有點期待的是製造商必須針對HttpRequest的設定預期值的方法,服務器等

感謝

回答

5

當您替換了刪除MVCContrib上下文的控制器的ControllerContext。試試這樣的:

using MvcContrib.TestHelper; 
using MvcContrib.TestHelper.Fakes; 
using Rhino.Mocks; 

... 
var builder = new TestControllerBuilder(); 
builder.Form.Add("testvar", "1"); 
builder.HttpContext.User = new FakePrincipal(new FakeIdentity("UserName"), new string[] { "Role" }); 
builder.HttpContext.Server.Stub(x => x.MapPath(Arg<string>.Is.Anything)).Return("Value"); 
builder.InitializeController(controller);