Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.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
springmvc中的单元测试_Spring_Unit Testing_Dao_Resttemplate - Fatal编程技术网

springmvc中的单元测试

springmvc中的单元测试,spring,unit-testing,dao,resttemplate,Spring,Unit Testing,Dao,Resttemplate,如果我想在spring中对我的dao类进行单元测试,我会调用我的服务方法并对它们进行测试,还是将服务方法与实际的dao方法分开进行测试 我应该模拟dao调用还是实际使用内存中的数据库,比如H2?我认为这更像是一种集成测试,尽管有些教程会这样做,或者标准方法是使用模拟数据库对象进行服务测试,并在测试dao调用时使用H2 最后。。我的应用程序有一个RESTAPI,它是使用SpringREST模板从web前端调用的,因此只有API web应用程序才能访问数据库 我会使用模拟对象测试每个web应用程序中

如果我想在spring中对我的dao类进行单元测试,我会调用我的服务方法并对它们进行测试,还是将服务方法与实际的dao方法分开进行测试

我应该模拟dao调用还是实际使用内存中的数据库,比如H2?我认为这更像是一种集成测试,尽管有些教程会这样做,或者标准方法是使用模拟数据库对象进行服务测试,并在测试dao调用时使用H2

最后。。我的应用程序有一个RESTAPI,它是使用SpringREST模板从web前端调用的,因此只有API web应用程序才能访问数据库

我会使用模拟对象测试每个web应用程序中的rest方法,然后启动一个tomcat实例并在这两个应用程序之间进行集成测试吗?如果我使用tomcat并在应用程序之间运行集成测试,会连接API应用程序中的数据库或模拟对象吗

测试web应用程序的rest调用实际上依赖于API应用程序的rest方法如何响应,所以这是否值得单独测试

我发现单元测试相当令人困惑,因为其中一些似乎几乎是集成测试


如果您在内存中对H2运行集成测试,但实际上我会使用MySQL,这有关系吗?

尝试按照所问的顺序回答您的问题

对于单元测试DAO方法,您应该使用处于已知状态的数据库直接测试实际的DAO类。H2非常适合这样做,因为您可以运行它,而无需为每个测试设置MySQL。使用带有
@Before
注释的设置方法可以确保数据库以预期方式响应

对于单元测试服务类,您应该模拟DAO类,以便它们总是以预期的方式运行。如果您将服务和DAO类用于实际数据,那么您现在可以通过同时测试多个层来运行集成测试。两者都有各自的价值,不过通常最好在集成测试之前进行单元测试,以确保每个组件都正常工作

测试控制器也是如此,您应该对其进行单元测试并模拟服务类,然后使用模拟请求执行集成测试,以测试请求/响应场景。同样,使用此测试设置,您现在可以同时测试多个层和类。这很好,因为它让您很好地了解了应用程序在实际中的运行方式,但对于隔离bug没有帮助


H2和MySQL显然是不一样的,并且没有共享所有相同的功能,所以你不能100%确信H2测试会在MySQL中通过,但是如果你只是测试标准CRUD操作,它应该可以做到这一点

我个人只会使用Spring数据,而不会完全实现和测试我自己的DAO类。@chrylis:这是一个很大的假设,Spring数据适合OPs用例。谢谢,这非常有用。它几乎回答了所有问题,您对作为独立maven模块的web应用程序之间的集成测试有何看法,作为测试的一部分启动tomcat是否值得?流程将是web应用程序控制器>>web应用程序服务(restTemplate)>>web API控制器>>web API服务>>web API DAO>>hibernate。是否值得自动化测试从web前端到API后端的调用,这将一次性测试多个层?我会将你的答案标记为答案,因为这正是我需要知道的。嗯,你可以一次测试的层次越多越好,如果可能的话,包括把Tomcat扔进去。它让你更好地了解应用程序将如何运行IRL。不过,这不应该取代单元测试。