В настоящее время я пишу некоторые спецификации MSpec для этого контроллера, которые уже были реализованы (да, я знаю, что делаю это «неправильно»).
Это «простая» проблема, но я не уверен, что делаю неправильно, и, надеюсь, кто-то сможет указать на ошибку моих путей.
Метод моего контроллера следующий:
public ActionResult Add()
{
this.SetPageTitle("Add something");
return this.View();
}
У меня проблема с
this.SetPageTitle("Add something");
Метод определен в базовом классе (BaseController), из которого определен текущий контроллер (CompanyHomeController).
Моя спецификация следующая:
[Subject(typeof(CompanyHomeController))]
public class when_the_company_add_page_is_requested
{
static string pageTitle;
static ActionResult result;
static CompanyHomeController companyHomeController;
// Arrange
Establish a_company_home_controller_context = () =>
{
var companyDao = A.Fake<ICompanyDao>();
companyHomeController = new CompanyHomeController(companyDao);
pageTitle = "Add something";
};
// Act
Because of = () => result = companyHomeController.Add();
// Assert
private It should_display_a_view = () => result.ShouldBeAView();
}
Когда я запускаю тест, он не проходит, и я получаю это сообщение:
System.NullReferenceException: Object reference not set to an instance of an object.
at ..Commons.Hosts.Web.Mvc.Base.BaseController.SetPageTitle(String title) in C:\Projects\Commons\.Commons.Hosts\Web\Mvc\Base\BaseController.cs:line 87
at ..Hosts.Web.Areas.Company.Controllers.CompanyHomeController.Add() in C:\Projects\\Hosts\.Hosts.Web\Areas\Company\Controllers\CompanyHomeController.cs:line 93
at ..Hosts.Web.Specs.Areas.Company.Controllers.when_the_company_add_page_is_requested.<.ctor>b__1() in C:\Projects\Hosts\.Hosts.Web.Specs\Areas\Company\Controllers\CompanyHomeControllerSpecs.cs:line 43
at Machine.Specifications.Utility.RandomExtensionMethods.InvokeAll(IEnumerable`1 actions) in d:\BuildAgent-02\work\9f23de4d4da9eb12\Source\Machine.Specifications\Utility\RandomExtensionMethods.cs:line 32
at Machine.Specifications.Model.Context.EstablishContext() in d:\BuildAgent-02\work\9f23de4d4da9eb12\Source\Machine.Specifications\Model\Context.cs:line 86
Я чувствую, что это что-то очевидное, но я не могу этого увидеть. Поскольку CompanyHomeController - это SUT, я не совсем понимаю, почему я должен касаться BaseController. Должен ли я заглушить последний? Если так, то почему?