我需要在ASP.Net MVC控制器上进行集成测试,该控制器在每个方法中调用HttpContext.Current。我已经尝试了各种方法并且已经做了大量的研究,尽管我觉得有些东西我不知道了。我走了路线:
非常感谢任何有关如何完成这些测试的建议。
谢谢,
编辑,我使用以下方法附加:
private static bool AttachToIIS(int tries = 10, int threadsleep = 500)
{
System.Threading.Thread.Sleep(1000);
bool isAttached = false;
int count = 0;
while (isAttached == false && count < tries)
{
_DTE dte = (_DTE)Marshal.GetActiveObject("VisualStudio.DTE.14.0");
Processes processes = dte.ActiveWindow.DTE.Debugger.LocalProcesses;
foreach (EnvDTE.Process process in processes)
{
System.Diagnostics.Debug.WriteLine("process: " + process.Name);
try
{
if (process.Name.Contains("iis"))
{
process.Attach();
isAttached = true;
}
}
catch (Exception e)
{
System.Diagnostics.Debug.WriteLine(e.Message);
}
}
System.Threading.Thread.Sleep(threadsleep);
count++;
}
return isAttached;
}
一个奇怪的是,当我附加到调试器(我不是COM专家)时,它会附加首先打开的visual studio实例的调试器。
答案 0 :(得分:0)
根据为什么使用HttpContext.Current
,您可以修改代码以改为使用Controller
类的HttpContext
属性。
然后,您可以为可以包含HTTP上下文的测试创建自定义ControllerContext
。请注意,MVC比旧的ASP.NET更智能,因为它使用HttpContextBase
,您可以在测试中继承甚至模拟完全自定义的HTTP上下文。
相关链接: