加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

单元测试 – 使用Owin为MVC 5控制器创建单元测试

发布时间:2020-12-16 04:23:11 所属栏目:asp.Net 来源:网络整理
导读:我正在尝试创建一个单元测试,以使用Framework 4.5.1在Visual Studio 2013中使用MVC 5的.NET模板项目中包含的控制器运行. 这是为了测试项目中包含的ManageController类以进行标准用户登录. 这是我用来调用控制器的Index操作的代码(请记
我正在尝试创建一个单元测试,以使用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.
如果我尝试调试进程似乎没有在控制器或事件控制器构造函数中击中Index方法.

我通过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时…中间件会将响应传递给下一个中间件来处理.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读