2009-11-19 84 views
2

现在困扰了我一段时间。我把所有的验证都放在服务层中。然而,当我进行单元测试时,我通常通过行动方法传递一切。然后进入我的服务层,包含验证。你应该在哪里测试你的验证?

所以我不确定现在如果这是做到这一点的最好方法。既然他们通常说你应该测试这种方法。

那么你们怎么看?

回答

3

如果您通过行动请求传递所有内容,那么听起来您正在进行集成测试。

如果你正在做(单元)测试,那么你应该测试单位。在这种情况下,您可以将所需的所有数据传递给服务层以模拟动作请求。

您应该模拟传递给服务层的对象,传递它,然后根据您实际返回的结果声明预期的结果。

编辑

,正如另外,它是伟大的端至端,或集成,测试,因为它证明(进程)的作品。

但是,您必须进行单元测试,因为它们将测试各个组件,并且比端到端测试能够或将要更快地使缺陷归零。

+0

那么我应该不测试视图?就像我所拥有的基本上是一个方法,将在if语句中被称为Create(),这将做验证并创建一些然后返回true。然后我只是回报一些东西。那么在视图中会有什么需要测试的呢?就像我假设我会模拟创建方法然后因为我没有测试它。所以真的只有一个if语句返回true。 – chobo2 2009-11-19 20:04:14

+0

在这种情况下,我可能不会打扰测试视图。 TDD是您需要设计自己以便最适合您的应用程序的东西。所有应用程序都没有一个公式。决定你需要编写测试的代码,以便在任何时候你应该能够运行它们并确定应用程序中其他地方的代码更改引发的任何问题。 www.dnrtv.com由Venkat在TDD上进行了精彩的表演。我强烈建议查看它。 – griegs 2009-11-19 20:33:45

1

如果我是你,我会单独测试包含验证的服务层,而不是通过操作方法。

原因是我想让我的测试代码“一次只进行一次测试”。我对我的控制器进行了测试,测试模型和视图的交互,而不是别的;我希望专门为服务层和验证进行测试。

当你在做单元测试时,mocks只是不可避免的。

+0

+1。是的,有集成测试的情况下,但很早之前,我认为你需要做单元测试。这样,如果您在任何地方进行更改,都会比集成测试更快。 – griegs 2009-11-19 01:32:49