c# - 在 .NET Core Web 应用程序中测试路由
问题描述
我正在尝试编写一套测试,以确认预期的路线将转到正确的控制器/操作。
我通过查看其他地方的示例完成了其中的一部分,但现在我不知道如何(或是否可能)从我可用的对象中获取控制器详细信息。
[Test]
public void Test_A_Route()
{
var server = new TestServer(
new WebHostBuilder()
.UseEnvironment("Development")
.UseConfiguration(GetConfiguration())
.UseStartup<Startup>());
var client = server.CreateClient();
var response = client.GetAsync("/My/Url/").GetAwaiter().GetResult();
response.EnsureSuccessStatusCode();
string contentResult = response.Content.ReadAsStringAsync().GetAwaiter().GetResult();
contentResult.Should().Contain("Some text from my webpage that is hopefully unique");
}
我希望能够验证以下内容:
- 控制器名称
- 视图名称
- 该模型
知道该怎么做吗?
解决方案
我认为您可以将此 IActionFilter 用于此任务:
public class DebugFilter : IActionFilter
{
bool enabled = false;
IDictionary<string, object> arguments = null;
public void OnActionExecuting(ActionExecutingContext context)
{
enabled = context.HttpContext.Request.Headers.ContainsKey("X-Debug");
if (enabled)
{
arguments = context.ActionArguments;
}
}
public void OnActionExecuted(ActionExecutedContext context)
{
if (enabled)
{
var controllerName = context.Controller.GetType().Name;
var actionName = context.ActionDescriptor.DisplayName;
context.HttpContext.Response.Headers.Add("X-Controller-Name", controllerName);
context.HttpContext.Response.Headers.Add("X-Action-Name", actionName);
context.HttpContext.Response.Headers.Add("X-Action-Model", JsonConvert.SerializeObject(arguments));
}
}
}
并在您的 Startup.cs 文件中全局注册它:
#if DEBUG
services.AddMvc(options =>
{
options.Filters.Add(new DebugFilter());
})
#else
services.AddMvc()
#endif
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
之后,您只在测试中包含“X-Debug”标头,并从响应标头中接收您想要的所有信息。
编辑:这是一个非常简单的类,您可以访问 ViewData、Result、TempData 等等
推荐阅读
- javascript - React Native 将异步函数导出到组件中
- python - 如何在 matplotlib 中放大 3D 绘图
- reactjs - 如何截断 apexcharts 热图中的标签?
- php - $this 在不使用 -> 时指的是什么
- facebook - 没有在 Facebook 评论中获取“来自”属性
- xcode - Android Studio、Xcode、Cocopods
- cordova - 如何更改 SHA -1 证书指纹 Ionic/Cordova
- kubernetes-helm - 使用 Spinnaker 部署 Helm 图表
- sql - 拉出与聚合函数的 (min) 匹配的单独列
- node.js - 如何连接多个 SMSC IP