2 回答

TA貢獻1836條經驗 獲得超3個贊
根據異常消息所指的GitHub源代碼,
protected UrlHelperBase(ActionContext actionContext)
{
if (actionContext == null)
{
throw new ArgumentNullException(nameof(actionContext));
}
ActionContext = actionContext;
AmbientValues = actionContext.RouteData.Values;
_routeValueDictionary = new RouteValueDictionary();
}
助手正在嘗試訪問actionContext.RouteData.Values原始示例中未提供的內容。
為測試流程完成提供必要的依賴項。
[Fact]
public async Task AuthenticateAsyncTest() {
// Arrange
var httpContext = new DefaultHttpContext();
var actionContext = new ActionContext(httpContext, new RouteData(), new ActionDescriptor());
var controller = new Controller(serviceProvider) {
Url = new UrlHelper(actionContext)
};
// Act
var result = await controller.Authenticate() as ViewResult;
// Assert
Assert.NotNull(result);
}
還要避免使用 async void 進行單元測試。改為使用Task。

TA貢獻2051條經驗 獲得超10個贊
第二種選擇是使用特定的構造函數。該文檔聲明它應該用于單元測試,更具體地說,當 ActionContext 只需要傳入但不被消費代碼使用時。
UrlHelper Url = new UrlHelper(new ActionContext { RouteData = new RouteData() });
感謝在 githhub 上重播的 navelDirt 和 pranavkm: https ://github.com/aspnet/AspNetCore/issues/6703
- 2 回答
- 0 關注
- 160 瀏覽
添加回答
舉報