gpt4 book ai didi

unit-testing - 使用 Owin 为 MVC 5 Controller 创建单元测试

转载 作者:行者123 更新时间:2023-12-04 08:48:38 29 4
gpt4 key购买 nike

我正在尝试使用 Framework 4.5.1 创建一个单元测试,以使用包含在 Visual Studio 2013 中 MVC 5 的 .NET 模板项目中的 Controller 运行。

这是为了测试项目中包含的 ManageController 类以进行标准用户登录。

这是我用来调用 Controller 的 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。
如果我尝试调试该过程似乎没有命中 Controller 中的 Index 方法或事件 Controller 构造函数。

我通过 NuGet 添加了“Microsoft.Owin.Testing”包。并且正在正确调用应用程序的 Startup 类中的 Configuration 方法。

我错过了什么?我在网上找不到一个明确的例子来实现该测试。
有人可以在这里逐步介绍如何测试该 Controller 吗?

谢谢

最佳答案

你不能这样做。 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; set; }
从那里,当您调用 server.httpclient.getasync...中间件会将响应传递给下一个中间件进行处理。

关于unit-testing - 使用 Owin 为 MVC 5 Controller 创建单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25895748/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com