我想对建筑问题进行专家解释。想象一下Spring MVC webapp,带有验证API(JSR 303)。因此,对于请求,我有一个处理请求的控制器,然后将其传递给服务层,服务层传递给DAO。
这是我的问题。应该在哪一层进行验证,以及如何进行验证?
我的控制器必须处理基本验证(必填字段是空的吗?字段长度是否正常?等等)。然后服务层可以做一些涉及其他objets的tricker东西。 DAO根本没有验证。 但是,如果我想实现一些单元测试(即服务下面的测试层,而不是控制器),我最终会出现意外行为,因为一些验证应该在Controller层完成。由于我们不将其用于单元测试,因此存在问题。
处理此问题的最佳方法是什么?我知道没有普遍的答案,但你的个人经历非常受欢迎。
非常感谢。 问候。
答案 0 :(得分:3)
在您的服务单元测试中,将您的测试数据制作成通过所有控制器级别验证检查 - 基本上假设控制器级别验证将完美运行,并且您的服务只会从控制器的角度接收有效的数据。然后,在控制器的单元测试中测试每个验证案例。最后,包括在两个级别上都无法验证的集成测试,并确保没有通过。