Я никогда не запускал модульное тестирование раньше, и я просто пытаюсь запустить пример, который я нашел в сети снова и снова в отношении имени представления.Почему возникает следующая ошибка: «System.NullReferenceException: ссылка на объект не установлена в экземпляр объекта». когда я запускаю модульный тест?
Мой тестовый код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Admin.Web.API.Controllers;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Web.Mvc;
namespace Admin.Web.API.Controllers.Tests
{
[TestClass()]
public class HomeControllerTests
{
[TestMethod()]
public void IndexTest()
{
HomeController controller = new HomeController();
var result = controller.Index() as ViewResult;
Assert.AreEqual("Index", result.ViewName);
}
}
}
Ошибка я получаю System.NullReferenceException: Object reference not set to an instance of an object.
на линии, которая устанавливает результат просмотра.
Что мне нужно сделать, чтобы это сработало? Есть ли что-нибудь более подробное, чем примеры тестирования модулей?
Редактировать один
Controller Код для индекса
public ActionResult Index()
{
if (this.Session["UserID"] == null)
{
return View("Login");
}
else
{
ViewBag.Title = "Index";
ViewBag.SiteID = this.Session["SiteID"];
ViewBag.AssemblyVersion = this.Session["AssemblyVersion"];
ViewBag.UserFirstName = this.Session["FirstName"];
GoogleAnalytics _oGoogleAnalytics = new GoogleAnalytics();
ViewBag.GoogleAnalytics = _oGoogleAnalytics.GetGoogleAnalytics(
this.Session["GoogleAnalyticsAccountCode"].ToString(),
Convert.ToBoolean(this.Session["UseGoogleAnalytics"]));
return View("Index");
}
}
@AlexeiLevenkov Серьезно, можем ли мы остановиться на этом дублированном дерьме по этим вопросам? Я уверен, что OP знает, что что-то имеет значение null, но не как исправить тест, который в этом случае должен предоставить ControllerContext, чтобы дать контроллеру необходимую информацию. Проблема здесь заключается не в том, что он не знает, что такое NRE, а в том, что он не знает, как правильно настроить контроллер для модульного тестирования, потому что MVC обычно справляется с этим. – Andy
@AlexeiLevenkov Я давал всю эту информацию в своем ответе, когда вы решили закрыть все это самостоятельно. В этом вопросе есть все детали, необходимые для того, чтобы кто-то, знакомый с соответствующими технологиями, ответил. – Andy
@ Проблема с Энди ФП была совершенно не связана с постами в соответствии с комментарием ... Не забудьте привести вопрос в свой будущий ответ, когда закончите. –