Spring boot 对使用new关键字创建的对象使用mockito

Spring boot 对使用new关键字创建的对象使用mockito,spring-boot,mockito,testng,ibm-midrange,Spring Boot,Mockito,Testng,Ibm Midrange,为了编写一个测试,我可以模拟As400,那么CommandCall呢?我该怎么处理呢?当我在实现类中使用new关键字创建它时,我对如何在编写测试用例时使用模拟As400感到困惑 上述编码方式也是一种良好的实践吗?还是我没有编写可测试的代码 在编写代码时,我应该注意哪些事项,以便于编写测试用例是的,您还应该使CommandCall类可注入,以便轻松地对代码进行单元测试。您可以创建一个新的配置类,并将CommandCall定义为一个bean,然后将其注入Check类中 Class Checktest

为了编写一个测试,我可以模拟As400,那么CommandCall呢?我该怎么处理呢?当我在实现类中使用new关键字创建它时,我对如何在编写测试用例时使用模拟As400感到困惑

上述编码方式也是一种良好的实践吗?还是我没有编写可测试的代码


在编写代码时,我应该注意哪些事项,以便于编写测试用例

是的,您还应该使
CommandCall
类可注入,以便轻松地对代码进行单元测试。您可以创建一个新的配置类,并将
CommandCall
定义为一个bean,然后将其注入
Check
类中

Class Checktest{

@InjectMock
Check check;

@Mock
As400 as400

@Test()
public void testExternalService(){

}

然后,您的
检查
将只依赖于
CommandCall
,您可以轻松地模拟它,就像您使用
As400

一样。只要您模拟了对
As400
方法调用的任何调用,您的计划就可以了。但是,为什么不仅仅是
@Autowire
命令调用?现在,您并不是在真正编写单元测试,而是在编写一个同时测试
Check
CommandCall
及其契约的测试。如果你需要它来给你信心,那就太好了。你能告诉我什么时候我应该把它作为bean注入吗?什么时候我不应该呢?上面的代码没有把它作为bean注入,而是声明了一个
CommandCall
类型的bean在你的应用程序的任何地方自动连接
Class Checktest{

@InjectMock
Check check;

@Mock
As400 as400

@Test()
public void testExternalService(){

}
@Configuration
public class AppConfig {

  @Bean
  public CommandCall commandCall(As400 as400) {
   return new CommandCall(as400);
  }

}