I have controller with localization
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");
}
}
and I added xUnit project for testing and wrote next code
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);
}
}
When I running all tests, they returns false with exception:
Message: System.NullReferenceException : Object reference not set to an instance of an object.
When you double-click on a method in the StackTrace cursor appears on the line
ViewData["MyTitle"] = _localizer["Hello my dear friend!"];
I think this is due to IStringLocalizer
. How to fix it? May be somebody knows what is the reason?
null
. You need to create mock of the dependency and set it up to return an expected value for the test – Ammamaria