Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
N层体系结构和单元测试(使用Java)_Java_Unit Testing_Architecture - Fatal编程技术网

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

N层体系结构和单元测试(使用Java),java,unit-testing,architecture,Java,Unit Testing,Architecture,我想听听你对一个架构问题的专业解释。想象一个SpringMVCwebapp,带有验证API(JSR303)。对于请求,我有一个控制器来处理请求,然后将其传递给服务层,服务层传递给DAO层 这是我的问题。验证应在哪一层进行,以及如何进行 我的想法是控制器必须处理基本验证(必填字段是否为空?字段长度是否正常?等等)。然后,服务层可以做一些欺骗的事情,包括其他对象。DAO根本不进行验证。 但是,如果我想实现一些单元测试(即服务下的测试层,而不是控制器),我将以意外的行为结束,因为一些验证应该在控制器层

我想听听你对一个架构问题的专业解释。想象一个SpringMVCwebapp,带有验证API(JSR303)。对于请求,我有一个控制器来处理请求,然后将其传递给服务层,服务层传递给DAO层

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

我的想法是控制器必须处理基本验证(必填字段是否为空?字段长度是否正常?等等)。然后,服务层可以做一些欺骗的事情,包括其他对象。DAO根本不进行验证。 但是,如果我想实现一些单元测试(即服务下的测试层,而不是控制器),我将以意外的行为结束,因为一些验证应该在控制器层中完成。由于我们不将其用于单元测试,因此存在一个问题

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

非常感谢。
关于。

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

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