【问题标题】:Unit testing controller method property单元测试控制器方法属性
【发布时间】:2013-03-27 01:56:16
【问题描述】:

我正在研究 Apress 的 Pro ASP.NET MVC 4,并试图了解用于单元测试特定控制器方法的语法。

给定一个类SomeController的控制器方法:

public ViewResult List(int someInt) {

  ViewModel model = new ViewModel {
    ModelObject = new ModelObject {
      ObjectProperty = someInt;
    }
  }

  return View(model);
}

单元测试看起来像这样:

[test method]
Some_Test () {

   //...some code here to set up a mock object named 'mock'

   SomeController target = new SomeController(mock.Object);

   //This next line is where the syntax is confusing me
   int result = ((ViewModel)target.List(1).Model).ModelObject.ObjectProperty;

   Assert.AreEqual(result, 1);
}

这几乎就像ViewResult.Model 必须像ViewModel 或其他类型一样“强制转换”。我确信这种语法/技术有一个名称,我想了解更多关于这里发生的事情。

是否需要这种技术,因为类似于:

 int result = target.List(1).Model.ModelObject.ObjectProperty;

不能访问传递给视图的model 对象的属性吗?

【问题讨论】:

    标签: c# unit-testing casting controller viewresult


    【解决方案1】:

    这只是嵌入到方法链中的简单转换。 target.List(int) 返回 ViewResultViewResult.Model 被键入为 Object,以便可以使用任何模型类型。在您的测试中将其转换为您的 ViewModel 类型是必要的,以告诉编译器 Model 是什么类型。相当于:

    ViewModel model = (ViewModel)target.List(1).Model;
    int result = model.ModelObject.ObjectProperty;
    

    【讨论】:

    • 很明显我还没有做很多对象类型转换(正如我关于这样一个基本构造的菜鸟问题所证明的那样)。感谢DS的明确回答。现在说得通了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-27
    • 2014-08-21
    • 1970-01-01
    • 2022-07-27
    • 2010-12-25
    • 2014-04-07
    相关资源
    最近更新 更多