单元测试 – 使用Owin为MVC 5控制器创建单元测试
我正在尝试创建一个单元测试,以使用Framework 4.5.1在Visual Studio 2013中使用MVC 5的.NET模板项目中包含的控制器运行.
这是为了测试项目中包含的ManageController类以进行标准用户登录. 这是我用来调用控制器的Index操作的代码(请记住“Index”操作是默认操作): [TestClass] public class ManageControllerTests { [TestMethod] public async Task ManageController_Index_ShoudlPass() { using (var server = TestServer.Create<Startup>()) { var response = await server.HttpClient.GetAsync("/Manage"); Assert.AreEqual(HttpStatusCode.OK,response.StatusCode); } } } 测试没有失败,但响应是404. 我通过NuGet添加了“Microsoft.Owin.Testing”包.并且正确调用应用程序的Startup类中的Configuration方法. 我错过了什么?我无法在网络上找到一个明确的例子来实现该测试. 谢谢 解决方法
你不能这样做. OWIN管道旨在与任何托管环境分离运行.
MVC与system.web强烈耦合,这使得使用OWIN管道进行测试变得更加困难. 你可以做类似这样的事情: [TestClass] public class ManageControllerTests { [TestMethod] public async Task ManageController_Index_ShoudlPass() { using (var server = CustomTestServer.Create<Startup>()) { server.OnNextMiddleware = context => { context.Response.StatusCode.ShouldBe(Convert.ToInt16(HttpStatusCode.OK)); return Task.FromResult(0); } var response = await server.HttpClient.GetAsync("/Manage"); } } 你需要派生 public class CustomTestServer : TestServer 并在现有中间件之后在构造函数中添加中间件 appBuilder.Use(async (context,next) => { await OnNextMiddleware(context); }); 和一个公共成员 public Func< IOwinContext,Task> OnNextMiddleware {get;组; } 从那里,当你调用server.httpclient.getasync时…中间件会将响应传递给下一个中间件来处理. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – ASP.net MVC – 显示模板集合
- asp.net – 使用sql server的Web应用程序中的审计跟踪
- asp.net – 使用Visual Studio 2012发布到azure时,我可以使
- Razor in ASP.NET MVC 3.0
- asp.net – 我可以在卫星装配中组合本地资源吗?
- asp.net – 如何设置通配符(*)子域?
- asp.net-mvc – 如何在asp.net mvc中的url中添加页面标题?
- 动手写一个简版 asp.net core
- ASP.NET C#OutofMemoryException大文件上载
- asp.net-mvc – 如何在MVC控制器中使用消息框?