【问题标题】:How to check Model properties in unit test如何在单元测试中检查模型属性
【发布时间】:2012-06-26 19:57:20
【问题描述】:

我有一个Action,如下所示:

public ActionResult SaveAndExit()
{
    ViewModel1 viewModel = new ViewModel1();

    return View("Index", viewModel);
}

在单元测试中,我想检查 viewModel 中的视图 Reg 是否为空。请有任何建议

测试:

//act
var result = controller.SaveAndExit(viewModel) as ViewResult;

//assert
//Assert.IsNotNull(!result.Model["Reg"].Equals(null));

【问题讨论】:

  • 那个断言非常令人困惑......您正在检查某些东西是否不为空,然后检查结果是否不为空。这不能单独工作吗? Assert.IsNotNull(result.Model["Reg"])
  • 对。你打电话给Assert.IsNotNull(boolean)
  • @GazWinter 这行代码是错误的。模型不允许访问其属性。谢谢

标签: c# asp.net-mvc-3 unit-testing razor moq


【解决方案1】:

我倾向于将断言编写如下(在此处使用 Microsoft 测试框架断言 - 您没有指定 nunit):

// Act
ActionResult result = controller.SaveAndExit(viewModel);

// Assert
Assert.IsInstanceOfType(result, typeof(ViewResult));
ViewResult viewResult = (ViewResult)result;

Assert.IsInstanceOfType(viewResult.Model, typeof(ViewModel1));
ViewModel1 model = (ViewModel1)viewResult.Model;

Assert.IsNotNull(model.Reg);

【讨论】:

  • 嗨,在调试模型中,reg 为 null,但它抛出异常 Assert.IsNotNull failed.
  • @user1211185 这就是断言的重点。您断言 Reg 不为空,如果是,那么您的测试应该失败。
  • 工作Assert.IsNotNull(model.Reg);替换为Assert.IsNull(model.Reg);....非常感谢
  • @user1211185 很高兴为您提供帮助,但请确保这是您希望代码执行的操作 - 不要只是修复测试,哈哈。
【解决方案2】:

单元测试应该测试业务逻辑。您不需要编写单元测试来检查某些属性是否为空。

【讨论】:

  • 除非您正在修复一个在渲染视图时引发空引用异常的错误。没有理由这不是一个“值得”的测试。
  • @user1211185,我建议看看Unit Testing Best Practices。无论如何,这个链接肯定对你有用。
猜你喜欢
  • 2017-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-09
  • 1970-01-01
相关资源
最近更新 更多