0

私は現在、すでに実装されているこのコントローラーの MSpec 仕様をいくつか書いています (はい、「間違った」方法で実行していることはわかっています)。

これは「単純な」問題ですが、何が間違っているのかわかりません。うまくいけば、誰かが私のやり方の誤りを指摘できるでしょう。

私のコントローラーの方法は次のとおりです。

 public ActionResult Add()
    {
        this.SetPageTitle("Add something");
        return this.View();
    }

私が抱えている問題は

this.SetPageTitle("Add something");

メソッドは、現在のコントローラー (CompanyHomeController) が定義されている基本クラス (BaseController) で定義されます。

私のスペックは次のとおりです。

[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 に触れなければならない理由がよくわかりません。後者をスタブする必要がありますか?もしそうなら、なぜですか?

4

1 に答える 1

1

SetPageTitleおそらくHttpContext、単体テストでは使用できず、モックする必要がある可能性のある にアクセスしようとしています。残念ながら、この方法を示していないため、これ以上のヘルプを提供することは困難です。

于 2011-04-15T13:07:38.547 に答える