Использование mockito для объектов, созданных с использованием нового ключевого слова - PullRequest
0 голосов
/ 09 марта 2020
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? как мне с этим бороться? Создавая его с новым ключевым словом в классе реализации, я не понимаю, как использовать с ним макетированный As400 при написании моего тестового примера

И также является ли приведенный выше способ кодирования хорошей практикой? или я не пишу тестируемый код?

И какую осторожность следует соблюдать при написании кода, чтобы было легко писать тестовые случаи

1 Ответ

0 голосов
/ 09 марта 2020

Да, вы также должны сделать класс CommandCall инъекционным, чтобы легко выполнить модульное тестирование вашего кода. Вы можете создать новый класс конфигурации и определить свой CommandCall там как bean-компонент и внедрить его позже в ваш Check класс

@Configuration
public class AppConfig {

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

}

, и тогда ваш Check будет полагаться только на CommandCall, который Вы можете легко издеваться, как вы уже сделали с As400

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...