尝试在 ActionContext() 的帮助下创建用于测试目的的 URLHelper 会引发 NullReferenceException。
重现行为的步骤:
引发消息:System.NullReferenceException:未将对象引用设置为对象的实例。
错误报告也可以在 StackOverflow 上找到:
https://stackoverflow.com/questions/54199103/trying-to-test-a-controller-with-a-urlhelper
这里发生的是, UrlHelper
试图访问RouteData
的财产ActionContext
检查它是否有其价值从而导致异常。 要解决此问题,您可以执行以下操作:
var url = new UrlHelper( new ActionContext{ RouteData = new RouteData() } );
该特定构造函数被记录为用于单元测试,更具体地说,当ActionContext
只需要传入,但不被消费代码使用时。 按照@navelDirt建议的方式进行设置将是
更进一步,如果您打算对一段代码是否生成特定的 url 进行单元测试,那么使用 stub\mock IUrlHelper
会取得更好的成功。 如果您需要验证实际结果,我强烈建议您编写集成测试
非常感谢@navelDirt和@pranavkm。
我很困惑,因为在核心 1.1 中它没有设置 RouteData 就可以工作,但是切换到 2.2 时它崩溃了。 这就是为什么我认为这是一个错误......很抱歉给您带来不便。