我可以从模型测试控制器方法吗?

问题描述:

我有一个在ASP.NET MVC中构建的网站,它使用XML文件作为其菜单系统的主干。该XML文件中的节点列出了菜单项,它们的显示文本以及调用的控制器名称和操作方法。我想出了一个想法,如果我可以使用控制器名称和操作方法名称调用控制器方法,我可以通过编程方式测试所有方法以查看是否抛出错误。我不想在浏览器中显示该页面;只需运行控制器方法,任何错误都会记录在我的数据库中。我想用类似于Test模型类的代码来完成它,但是我无法得到它来编译。 RenderAction是一个在我的View页面中工作的方法,但是模型表示该方法不存在。有人可以指导我如何使这个工作?我可以从模型测试控制器方法吗?

HtmlHelper oHtmlHelper = new HtmlHelper(oViewContext, oViewDataContainer); 
oHtmlHelper.RenderAction(sController, sAction); 
+0

几个问题:为什么你试图在模型中测试控制器?你有没有理由不在单元测试课上测试你的控制器方法?另外,当您尝试编译时,您收到的错误或错误是什么? – floppsb

+0

为什么不在单元测试课上?因为我不知道该怎么做。如果我可以使用XML文件来快速迭代我想了解更多信息的节点。如果我必须像我在其他公司那样建立一个复杂的单元测试结构,那么我就不感兴趣。我们正在寻找更简单的解决方案,否则它将无法完成。 –

+0

我发现了错误,并且能够让它编译并运行。它的作品非常漂亮。看看我得到的所有倒票。我会在这里发布我的解决方案,但不是那种滥用。你们是如此封闭的头脑。你只能看到做事的“企业方式”。我的方法非常出色。什么也没有。 –

整个测试的目的是让你更好,更易维护的代码。其中一部分是单元测试,它本质上是测试单元的功能。你在这里有一个绝对乞求重构的情况。当事情难以测试时,这肯定表明您的设计存在缺陷。

除了在一个动作中拥有所有这些逻辑,然后尝试测试整个动作渲染逻辑以确定它是否工作,请将逻辑分解为一个辅助类。然后,您应该能够轻松测试该类中的某个方法是否会返回一个好结果。我不确定你的意思是“复杂的单元测试结构”,因为单元测试本质上很简单,几乎所有你需要的东西都放到.NET中(尽管更好的选项经常作为第三方库存在)。无论如何,所有你需要开始单元测试是创建一个单元测试项目,添加到你要测试的项目的引用,然后添加一个简单的类,如:

[TestClass] 
public class MyAwesomeTests 
{ 
    [TestMethod] 
    public void TestSomething() 
    { 
     ... 
    } 
}