为Asp.net mvc 3控制器编写测试时,MSpec和基类测试失败

| 我目前正在为此控制器编写一些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。我应该把后者打掉吗?如果是这样,为什么?     
已邀请:
SetPageTitle
可能正在尝试访问
HttpContext
,这在单元测试中不可用,您可能需要对其进行模拟。不幸的是,由于您没有显示此方法,因此很难提供更多帮助。     

要回复问题请先登录注册