nunit 在响应后继续运行.重定向与结束响应
本文关键字:响应 重定向 运行 结束 继续 nunit | 更新日期: 2023-09-27 18:34:25
我正在用C#编写一些针对我的WebFormsMVP代码的单元测试。 在我的代码中,我有一些项目,如果满足某个条件 - 我调用
Response.Redirect("urlToGoTo", true);
但似乎重定向后的所有代码仍在执行。 这是 nunit 中的错误吗? 或者除了编写以下代码之外,我还可以做些什么:
if(somethingTrue){
Response.Redirect("toUrl", true);
return;
}
var keepGoing = someMoreProcesses();
Response.Redirect("toSomeOtherUrl", true);
--开始编辑--
在下面的代码中 - 如果我有一个测试来检查 Response.Redirect 是否被调用过一次 - 它将显示它被调用了多次,即使响应应该在第一次重定向后结束
if(somethingTrue){
//This should end the response!
Response.Redirect("toUrl", true);
}
//but this still runs in the unit test
var keepGoing = someMoreProcesses();
Response.Redirect("toSomeOtherUrl", true);
--结束编辑--
我还应该声明我正在设置一个 moq'd http 上下文,例如:
HttpContext = new Mock<HttpContextBase>();
Request = new Mock<HttpRequestBase>();
Response = new Mock<HttpResponseBase>();
Session = new Mock<HttpSessionStateBase>();
HttpContext.Setup(x => x.Request).Returns(Request.Object);
HttpContext.Setup(x => x.Response).Returns(Response.Object);
HttpContext.Setup(x => x.Session).Returns(Session.Object);
我可以在最小起订量响应上设置一些东西吗?
在单元测试期间访问 Response.Redirect。解决这个问题的一种方法是围绕 Response.Redirect("toUrl", true( 创建一个包装类;现在 a.您可以确保在单元测试中存根该方法。 b 您可以验证是否调用了 Response.Redirect。
public interface IHttpContextWrapper
{
void Reditect(strinh url)
}
您的实施
public class HttpContextWrapper :IHttpContextWrapper
{
publlic void Reditect(string url)
{
Response.Redirect(url, true);
}
}
在 sut(被测试系统(中,将此类作为依赖项注入并调用重定向
在单元测试中,您可以存根/模拟 HttpContextWrapper.Redirect 方法。
更新:
其中一个问题"这是nunit中的错误吗?不,非常确定这与测试执行上下文有关。在测试执行上下文上运行 - 存根 HttpContext 和存根响应对象。这些操作不会像往常一样工作,这可能会导致即使在响应重定向之后执行也会继续。
已经采取了一种方法来消除这个问题,我遇到了下面的博客文章。似乎如果您可以将存根响应对象配置为在重定向期间引发异常,它将中断执行,以便您可以验证。请参阅下面的更多信息。
http://joelabrahamsson.com/performing-and-testing-redirects-with-aspnet-web-forms-mvp/