gpt4 book ai didi

asp.net-mvc - 在单元测试中调用 UrlHelper.Content(string) 时出现 NullReferenceException

转载 作者:行者123 更新时间:2023-12-04 06:49:24 25 4
gpt4 key购买 nike

我有几个想要进行单元测试的 UrlHelper 扩展方法。但是,当路径以“~/”开头时,我从 UrlHelper.Content(string) 方法中得到了一个 NullReferenceException。有谁知道是什么问题?

[Test]
public void DummyTest()
{
var context = new Mock<HttpContextBase>();
RequestContext requestContext = new RequestContext(context.Object, new RouteData());
UrlHelper urlHelper = new UrlHelper(requestContext);

string path = urlHelper.Content("~/test.png");

Assert.IsNotNullOrEmpty(path);
}

最佳答案

当您使用 RouteContext 创建 UrlHelper 时,HttpContext 在您的单元测试环境中为空。如果没有它,当你尝试调用任何依赖它的方法时,你会遇到很多 NullReferenceExceptions。

有许多关于模拟各种网络上下文的线程。你可以看看这个: How do I mock the HttpContext in ASP.NET MVC using Moq?

或者这个 Mock HttpContext.Current in Test Init Method

编辑:以下将起作用。请注意,您需要模拟 HttpContext.Request.ApplicationPath 和 HttpContext.Response.ApplyAppPathModifier()。

[Test]
public void DummyTest() {
var context = new Mock<HttpContextBase>();
context.Setup( c => c.Request.ApplicationPath ).Returns( "/tmp/testpath" );
context.Setup( c => c.Response.ApplyAppPathModifier( It.IsAny<string>( ) ) ).Returns( "/mynewVirtualPath/" );
RequestContext requestContext = new RequestContext( context.Object, new RouteData() );
UrlHelper urlHelper = new UrlHelper( requestContext );

string path = urlHelper.Content( "~/test.png" );

Assert.IsNotNullOrEmpty( path );
}

我在以下线程中找到了详细信息: Where does ASP.NET virtual path resolve the tilde "~"?

关于asp.net-mvc - 在单元测试中调用 UrlHelper.Content(string) 时出现 NullReferenceException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12700415/

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