Сбой теста MSpec и базового класса при написании теста для контроллера Asp.net MVC 3 - PullRequest
0 голосов
/ 15 апреля 2011

В настоящее время я пишу некоторые спецификации 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. Должен ли я заглушить последний? Если так, то почему?

1 Ответ

1 голос
/ 15 апреля 2011

SetPageTitle, вероятно, пытается получить доступ к HttpContext, который недоступен в модульном тесте и который вам может понадобиться, чтобы высмеять . К сожалению, поскольку вы не показали этот метод, трудно предоставить дополнительную помощь.

...