N层体系结构和单元测试(使用Java)

问题描述:

我希望得到关于体系结构问题的专家解释。想象一下Spring MVC webapp,带有验证API(JSR 303)。因此,对于请求,我有一个处理请求的控制器,然后将它传递给服务层,该层传递给DAO服务层。N层体系结构和单元测试(使用Java)

这是我的问题。验证发生在哪一层,以及如何进行验证?

虽然我的控制器必须处理基本验证(必填字段为空吗?字段长度是否正确?等等)。然后服务层可以做一些比较常用的东西,涉及其他的东西。 DAO根本没有验证。但是,如果我想实现一些单元测试(即服务下面的测试层,而不是控制器),那么最终会出现意外的行为,因为一些验证应该在Controller层完成。由于我们不使用它进行单元测试,所以存在一个问题。

处理这个问题的最佳方法是什么?我知道没有普遍的答案,但您的个人经历非常受欢迎。

非常感谢。 此致敬礼。

在您的服务单元测试中,制作您的测试数据就好像它通过了所有控制器级别的验证检查一样 - 本质上假设控制器级别验证将完美工作,并且您的服务将只接收从控制器角度来看有效的数据。然后,在控制器的单元测试中测试每个验证案例。最后,包括集成测试,这两种测试都无法通过验证,并确保无法通过。