我知道這是一個老問題,並可能在別處得到解答,但在我正在開發的一個項目中,我們可以使用Linqpad調試Controller Actions d得到返回的值。
簡單地說,你需要告訴Linqpad返回的東西:
var result = homeController.Index();
result.Dump();
您可能還需要模擬你的背景和附加視覺工作室的調試器。
完整的代碼片段:
void Main()
{
using(var svc = new CrmOrganizationServiceContext(new CrmConnection("Xrm")))
{
DummyIdentity User = new DummyIdentity();
using (var context = new XrmDataContext(svc))
{
// Attach the Visual Studio debugger
System.Diagnostics.Debugger.Launch();
// Instantiate the Controller to be tested
var controller = new HomeController(svc);
// Instantiate the Context, this is needed for IPrincipal User
var controllerContext = new ControllerContext();
controllerContext.HttpContext = new DummyHttpContext();
controller.ControllerContext = controllerContext;
// Test the action
var result = controller.Index();
result.Dump();
}
}
}
// Below is the Mocking classes used to sub in Context, User, etc.
public class DummyHttpContext:HttpContextBase {
public override IPrincipal User {get {return new DummyPrincipal();}}
}
public class DummyPrincipal : IPrincipal
{
public bool IsInRole(string role) {return role == "User";}
public IIdentity Identity {get {return new DummyIdentity();}}
}
public class DummyIdentity : IIdentity
{
public string AuthenticationType { get {return "?";} }
public bool IsAuthenticated { get {return true;}}
public string Name { get {return "[email protected]";} }
}
你應該得到提示選擇一個調試器,與您的應用程序選擇內置的Visual Studio的實例。
我們針對MVC-CRM進行了具體設置,因此這可能不適用於所有人,但希望這可以幫助其他人。
我可以問一下這樣一個專長的目標是什麼嗎? – 2013-03-18 14:03:19
@Kenneth K主要目的是使測試和錯誤修復更容易。當然,我可以使用單元測試,但他們並沒有像Linqpad中的轉儲那樣強大的輸出方法。 – Neir0 2013-03-18 14:06:51
@Kenneth K另一個原因是更好地理解asp.net mvc應用程序的實際工作方式。當你試圖用自己的手做時,閱讀任何文章都會好得多。 – Neir0 2013-03-18 14:13:11