Model view controller 我应该测试我的控制器(MVC)吗?
我已经使用TDD好几个月了,现在我想学习如何测试我的控制器(MVC) 单元测试是通过测试每个功能的最小单元来进行的。有时,控制器并不小。它们从模型中获取数据,然后传递给视图 我应该如何对控制器进行单元测试?我应该模拟控制器的依赖关系吗 控制器测试是否被视为集成测试Model view controller 我应该测试我的控制器(MVC)吗?,model-view-controller,controller,mocking,tdd,integration-testing,Model View Controller,Controller,Mocking,Tdd,Integration Testing,我已经使用TDD好几个月了,现在我想学习如何测试我的控制器(MVC) 单元测试是通过测试每个功能的最小单元来进行的。有时,控制器并不小。它们从模型中获取数据,然后传递给视图 我应该如何对控制器进行单元测试?我应该模拟控制器的依赖关系吗 控制器测试是否被视为集成测试 谢谢。昨天问了同样的问题: 在我看来,是的,测试控制器是有意义的。你可以: 模拟它们背后的服务,因此只测试控制器本身更容易 让服务保持不动,并进行集成测试 我做TDD已经有很长时间了。我用ASP.NETMVC做TDD已经一年多了
谢谢。昨天问了同样的问题: 在我看来,是的,测试控制器是有意义的。你可以:
- 模拟它们背后的服务,因此只测试控制器本身更容易
- 让服务保持不动,并进行集成测试
集成测试很重要,也很有用,但我尽量少创建这些测试。我对控制器采取与Alexander B相同的方法。我的控制器又薄又哑。但是,我仍然为它们编写测试,以确保它们正确调用业务或服务对象并传递正确的参数 上周我终于发现了一个实际的bug,这可能是最好的说明。我有一个控制器,允许管理员批准或拒绝用户的请求,它有两个视图,一个是未完成请求的列表视图,另一个是每个请求的详细视图。两种观点都可以批准或拒绝。控制器调用的服务有一系列其他公开的方法,包括一个用于更改请求状态的方法。。。你可以看到这是怎么回事。列表视图调用了正确的方法来批准或拒绝并触发工作流,详细信息视图只调用了更改状态方法,没有启动任何进一步的工作流。这是我的编码错误,但就我的一生而言,我已经很久看不到它了——工作流在后台线程中运行,我花了一周时间在这些线程中运行,假设这是该部分中的错误 对我来说也是如此
- 一旦控制器将数据传递到其他地方,它就需要进行测试
- 如果控制器检查模型有效性,则需要进行测试(如果 有人拿走了支票?)
icontrolable
s)。然后,可以验证控制器是否以预期方式操纵受控对象
如果控制器和受控对象之间的交互很复杂,则专用集成测试可能有意义。例如,可能有一系列类实现了icontrolable
——这些实现中的每一个都能与控制器很好地协同工作吗?可能多个不同的IControllable
将交互(使用相同的资源)?或者,IControllables
可能有一些复杂的方法来配置它们,从而影响它们的行为?测试这一点的一种方法是编写一个可重用的测试套件,在其中输入一系列可疑的icontrolable
实现或它们的组合
最后但并非最不重要的一点是,TDD也是关于验收测试的。因此,在进行TDD时,您还将进行高级端到端测试,以执行最终用户能够识别的场景。最有可能的是,这些操作也会使用控制器——这样也可以测试控制器和(某些)类之间的正确集成。您首先编写模型的测试,对吗?你什么时候写集成测试?请举一个例子,应用服务