Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.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
Spring 测试类时,何时使用新操作符创建对象或使用自动关联?_Spring_Junit_Spring Test_Springjunit4classrunner - Fatal编程技术网

Spring 测试类时,何时使用新操作符创建对象或使用自动关联?

Spring 测试类时,何时使用新操作符创建对象或使用自动关联?,spring,junit,spring-test,springjunit4classrunner,Spring,Junit,Spring Test,Springjunit4classrunner,我要测试的类称为UserService with sendEmail方法,它向用户发送电子邮件。要完成这项任务,它依赖于EmailService。现在,当编写一个测试用例来测试它时-我应该创建UserService UserService=new UserService()和mock Email service,还是在测试类和mock Email service中创建上下文文件define UserService bean和@Autowired UserService?这两种方法的区别是什么?我

我要测试的类称为UserService with sendEmail方法,它向用户发送电子邮件。要完成这项任务,它依赖于EmailService。现在,当编写一个测试用例来测试它时-我应该创建UserService UserService=new UserService()和mock Email service,还是在测试类和mock Email service中创建上下文文件define UserService bean和@Autowired UserService?这两种方法的区别是什么?我什么时候应该使用一种方法而不是另一种方法?

我想这样说是为了

单元测试您可以使用
new
创建
UserService
并注入mock。在这种情况下使用
spring-ioc-container
不会有任何区别,除非测试速度较慢,因为它们不仅会创建单个类,还会启动spring-container

然而,如果您的应用程序使用
spring
,您也需要以某种方式对其进行测试,对于集成测试而言,使用旋转spring上下文的方法非常有效。在这种测试中,您将测试spring上下文是否可以启动,bean是否正确注入。然而,通常在此类测试中,人们试图用假端点替换真实服务,并相应地更改属性文件。例如:

将消息发送到某个队列-在docker中运行您自己的队列并将其用于测试

将某些内容保存到数据库-在docker中运行您自己的数据库或在Memory one中运行

点击一些HTTP端点-在docker中运行wiremock并模拟任何类型的响应,模拟连接故障等