У меня есть решение, называемое MvcContacts с проектом MVC 4 имени MvcContacts и проект модульного тестирования имени MvcContacts.Test (создается автоматически, когда я проверил «включить модульного тестирования» . окно в Visual StudioМодульное тестирование с Ninject в MVC 4
Я установил пакет Ninject.MVC NuGet в MvcContacts (проект MVC)
Я последовал this tutorial и у меня есть все установки без каких-либо ошибок, и он должен работать нормально;. как когда-либо, мой модульного тестирования проекта MvcContacts.Test есть ошибки, как это:
«MvcContacts.Controllers.HomeController» не содержит конструктор, который принимает аргументы 0
Это мой HomeController
:
namespace MvcContacts.Controllers
{
public class HomeController : Controller
{
Logging.ILogger _logger;
public HomeController(Logging.ILogger logger)
{
_logger = logger;
}
public ActionResult Index()
{
ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application.";
_logger.LogMessage(ViewBag.Message);
return View();
}
public ActionResult About()
{
ViewBag.Message = "Your app description page.";
return View();
}
public ActionResult Contact()
{
ViewBag.Message = "Your contact page.";
return View();
}
}
}
Это мой HomeControllerTest
:
namespace MvcContacts.Tests.Controllers
{
[TestClass]
public class HomeControllerTest
{
[TestMethod]
public void Index()
{
// Arrange
HomeController controller = new HomeController(); // error on this line
// Act
ViewResult result = controller.Index() as ViewResult;
// Assert
Assert.AreEqual("Modify this template to jump-start your ASP.NET MVC application.", result.ViewBag.Message);
}
[TestMethod]
public void About()
{
// Arrange
HomeController controller = new HomeController(); // error on this line
// Act
ViewResult result = controller.About() as ViewResult;
// Assert
Assert.IsNotNull(result);
}
[TestMethod]
public void Contact()
{
// Arrange
HomeController controller = new HomeController(); // error on this line
// Act
ViewResult result = controller.Contact() as ViewResult;
// Assert
Assert.IsNotNull(result);
}
}
}
Как я могу выполнить проект по тестированию модуля с помощью Ninject?
Спасибо Я попробую это, но если мне придется вручную разрешить зависимость, то что хорошего - это Ninject? Я думал, что одним из основных преимуществ Ninject было то, что он помогает в модульном тестировании. – user1477388
@ user1477388, используя инверсию шаблонов управления/зависимостей, упрощает модульный тест, но если ваш единичный тест настолько сложный, что вам нужно использовать свой контейнер IoC (Ninject) для настройки зависимостей, тогда ваши модульные тесты могут быть ТОО сложный. В модульном тесте * ideal * используется только один «реальный» экземпляр (например, 'HomeController') со всеми другими зависимостями, предоставляемыми как mocks. –
@SteveRuble: Если у вас нет слоев зависимостей. Если мне нужно высмеять класс A для ввода в класс B, который затем вводится в класс C, вам все равно придется тестировать класс C * как-то *, что означает разрешение зависимостей вручную или использование чего-то типа Ninject. Конечно, все, кроме C, было бы насмешкой, но вам все равно нужно вводить эти издевательства. –