【问题标题】:Using mockito on Objects created using new Keyword在使用 new 关键字创建的对象上使用 mockito
【发布时间】:2020-03-08 21:13:50
【问题描述】:
class Check{
@Autowired
As400 as400; // Is a class that creates a connection to an external system
 
Public void execute(){
CommandCall commandCall = new CommandCall(as400);  // is a class that takes the 
                                                   // connection and enables us to 
                                                   // execute commands on the external 
                                                   //system
 response = commandCall.callExternalService();
}
}
Class Checktest{

@InjectMock
Check check;

@Mock
As400 as400

@Test()
public void testExternalService(){

}

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

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

在编写代码时我应该注意什么,以便编写测试用例

【问题讨论】:

  • 你的计划很好,只要你模拟任何对As400方法调用的调用。但是,为什么不只是 @AutowireCommandCall?现在您并没有真正编写单元测试,您正在编写一个测试CheckCommandCall 及其合同的测试。如果你需要这个来给你信心,那就太好了。

标签: spring-boot mockito testng ibm-midrange


【解决方案1】:

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

@Configuration
public class AppConfig {

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

}

然后您的 Check 将仅依赖于 CommandCall,您可以像使用 As400 那样轻松地模拟它

【讨论】:

  • 你能告诉我什么时候应该将它作为 bean 注入,什么时候不应该
  • 上面的代码并没有将它注入为一个bean,而是声明一个CommandCall类型的bean在你的应用程序的任何地方自动装配
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 2023-04-05
  • 2018-07-03
  • 1970-01-01
  • 1970-01-01
  • 2019-01-17
相关资源
最近更新 更多