2012-06-25 24 views
1

我有一个Action波纹管:如何检查模型属性的单元测试

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

    return View("Index", viewModel); 
} 

在单元测试我要检查,如果视图Reg在视图模型为空或不是。任何建议请

测试:

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

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

即断言是相当混乱...您正在检查null,然后检查结果是否为空。这是不是自行工作? Assert.IsNotNull(result.Model [“Reg”]) –

+0

没错。你正在调用'Assert.IsNotNull(boolean)' – hometoast

+0

@GazWinter这行代码是错误的。模型不允许访问它的属性。谢谢 – user1211185

回答

7

我会倾向于写断言如下(使用微软测试框架,声称在这里 - 你没有指定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); 
+0

嗨,在调试模型中,reg是空的,但它的抛出异常'Assert.IsNotNull失败。' – user1211185

+0

@ user1211185这就是Assert的要点。你断言Reg不为null,如果是,那么你的测试应该失败。 – magritte

+0

**工作**用'Assert.IsNotNull(model.Reg);'替换'Assert.IsNull(model.Reg);'....很多谢谢 – user1211185

0

单元测试应该测试业务逻辑。你不需要编写一个单元测试只是为了检查一些属性为null。

+1

除非您正在修复渲染视图时抛出空引用异常的错误。没有理由这不是一个“值得”的测试。 – hometoast

+1

@ user1211185,我建议看看[单元测试最佳实践](http://osherove.com/videos/2009/8/25/unit-testing-best-practices.html)。无论如何,确保这个链接对你有用。 – Shymep