如何解决为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
,这在单元测试中不可用,您可能需要对其进行模拟。不幸的是,由于您没有显示此方法,因此很难提供更多帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。