【发布时间】:2019-01-15 12:41:57
【问题描述】:
尝试创建 URLHelper 用于测试目的会抛出 NullReferenceException。
例子:
[Fact]
public async void AuthenticateAsyncTest()
{
// Arrange
var controller = new Controller(serviceProvider)
{
Url = new UrlHelper(new ActionContext()) // Exception thrown
};
// Act
var result = await controller.Authenticate() as ViewResult;
// Assert
Assert.NotNull(result);
}
每次我运行这个测试时,Url = new UrlHelper(new ActionContext()) 中抛出的异常是:
异常消息:
消息:System.NullReferenceException:对象引用未设置为 一个对象的实例。
Exception.StackTrace:
UrlHelperBase.ctor(ActionContext actionContext) ControllerUnitTest.AuthenticateAsyncTest()
使用:
xUnit 2.4.1, Microsoft.NETCore.App 2.2.0, Microsoft.AspNetCore.Routing.Abstractions 2.2.0
重新创建异常:
- 创建一个空的 MVC 核心 2.2 解决方案
- 创建一个 xunit 测试项目
- 安装 NuGet Microsoft.AspNetCore.Mvc.Core 2.2.0
- 在测试中写入:var Url = new UrlHelper(new ActionContext());
- 运行测试
应该是这样的:
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Routing;
using Xunit;
namespace XUnitTestProject1
{
public class UnitTest1
{
[Fact]
public void Test1()
{
var Url = new UrlHelper(new ActionContext());
}
}
}
我的问题:
- 是否存在错误,或者为什么这不起作用?
- 感谢提供解决方法或链接的文献?
【问题讨论】:
-
ActionContext很可能缺少一些分配依赖项 -
Url 是 Controller 的属性。
new Controller() { Url = something };AKA 对象初始化器。 -
你需要一个真正的帮手,还是仅仅嘲笑它就可以逃脱?
-
在minimal reproducible example 中显示您实际尝试实现的目标,清楚地显示正在测试的代码。
-
@SyntaxError Url 是名称,因为这是一个初始化新类,您只需在类中设置变量即可。这就是为什么您需要 {} 并使用 no ;最后在那里。它是一个公共 IUrlHelper Url { get;放; }
标签: c# unit-testing xunit asp.net-core-mvc-2.0