gpt4 book ai didi

unit-testing - 带有 IStringLocalizer 的 asp.net 核心测试 Controller

转载 作者:行者123 更新时间:2023-12-04 05:15:59 27 4
gpt4 key购买 nike

我有本地化 Controller

public class HomeController : Controller
{
private readonly IStringLocalizer<HomeController> _localizer;

public HomeController(IStringLocalizer<HomeController> localizer)
{
_localizer = localizer;
}

[HttpPost]
public IActionResult SetLanguage(string culture, string returnUrl)
{
Response.Cookies.Append(
CookieRequestCultureProvider.DefaultCookieName,
CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture)),
new CookieOptions { Expires = DateTimeOffset.UtcNow.AddYears(1) }
);

return LocalRedirect(returnUrl);
}

public IActionResult Index()
{
ViewData["MyTitle"] = _localizer["Hello my dear friend!"];

return View("Index");
}
}

我添加了 xUnit 项目进行测试并编写了下一个代码

public class HomeControllerTest
{
private readonly IStringLocalizer<HomeController> _localizer;
private HomeController _controller;
private ViewResult _result;

public HomeControllerTest()
{
_controller = new HomeController(_localizer);
_result = _controller.Index() as ViewResult;
}

[Fact]
public void IndexViewDataMessage()
{
// Assert
Assert.Equal("Hello my dear friend!", _result?.ViewData["MyTitle"]);
}

[Fact]
public void IndexViewResultNotNull()
{
// Assert
Assert.NotNull(_result);
}

[Fact]
public void IndexViewNameEqualIndex()
{
// Assert
Assert.Equal("Index", _result?.ViewName);
}
}

当我运行所有测试时,它们返回 false 异常:

Message: System.NullReferenceException : Object reference not set to an instance of an object.



当你双击一个方法时 StackTrace 光标出现在行

ViewData["MyTitle"] = _localizer["Hello my dear friend!"];

我认为这是由于 IStringLocalizer .如何解决?可能有人知道是什么原因吗?

最佳答案

设置模拟以返回您的预期结果。

var mock = new Mock<IStringLocalizer<HomeController>>();
string key = "Hello my dear friend!";
var localizedString = new LocalizedString(key, key);
mock.Setup(_ => _[key]).Returns(localizedString);

_localizer = mock.Object;
_controller = new HomeController(_localizer);

关于unit-testing - 带有 IStringLocalizer 的 asp.net 核心测试 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43460880/

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