Метод не издеваться - PullRequest
       8

Метод не издеваться

0 голосов
/ 17 сентября 2018

Я использую Mockito, чтобы смоделировать метод, но тест выполняется реальным методом.

//Controller
@RestController
public class Controller {

    private Utils utils = new Utils();

    public String myMethod(String json){

        // Stuff gets done
        return utils.writeToKafka(topic, json, kafkatemplate, classname);

    }

У меня есть тестовый класс, который выглядит так:

//Test
@RunWith(SpringJUnit4ClassRunner.class)
public class ControllerTest {

    @Captor
    ArgumentCaptor<String> argumentCaptor;

    @Test
    public void processOSPUpdateRequested_test(){
         Controller controller = new Controller();
         Utils utils = Mockito.spy(new Utils());
         Mockito.doReturn("myResult").when(utils).writeToKafka(anyString(), anyString(), any(), anyString());

         String topic = controller.myMethod(myString);

         //Some assertions

Моя подпись метода writeToKafka:

public String writeToKafka(String topic, String json, KafkaTemplate<String, String> kafkaTemplate, String classname)

Однако, когда я запускаю тест, writeTokafka не высмеивается! Это работает фактический метод. Почему это происходит? Чего мне не хватает?

1 Ответ

0 голосов
/ 17 сентября 2018

Суть вашей проблемы: у вас new экземпляр Utils, и вы не можете точно получить его из своего теста.

Существует два способа исправить это- оба исходят из философской позиции о том, хотите ли вы использовать насмешки или нет.Обе do требуют, чтобы вы внедрили Utils и сделали его где-то бобом.

  1. Впрысните Utils, и в своем тесте вставьте макет, и отказаться от Spring Runner.

    После того, как у вас будет макет, вы захотите изменить свой тест на не использовать Spring Runner, но использовать Mockitoвместо этого бегун.

    @RunWith(MockitoJUnitRunner.class)
    public class ControllerTest {
        @Mock
        private Utils utils;
    
        @InjectMocks
        private Controller testObj;
    
        // The rest of your test code
    }
    
  2. Внедрить Utils в ваш тест в виде определенного bean-объекта, который демонстрирует поведение, которое вы хотите тестировать.

    Этонемного сложнее, но вы получаете возможность использовать Spring Runner.Я оставляю это как упражнение для читателя (по сути, когда у вас написан бин Utils, написание другого для тестов не составит труда).

...