Весенний ботинок 2.0.5. РЕЛИЗ - сыщик и мокито - PullRequest
0 голосов
/ 06 октября 2018

Я пытался разобраться с этим в течение недели, но безуспешно.Проблема в модульных тестах.

Это класс, который я пытаюсь проверить:

import brave.Span;
import brave.Tracer;

@Service
public class InternetBackEndRestClient {

    @Autowired
    private Tracer tracer;

  public PasswordJwtResponse generatePassworJwt(PasswordJwtRequest passwordJwtRequest, String traceId) throws LogonProxyException {
      log.info("{\"Starting method\": \"generatePassworJwt\", \"input\": {} }", passwordJwtRequest);

    Span newSpan = tracer.nextSpan().name("spanPasswordJwtResponse");
    ...
  }
}

Как я могу провести модульный тест?Brave.Tracer - последний класс, так что я не могу его высмеять.Есть ли способ настроить контекст?или макет Tracer?

@RunWith(MockitoJUnitRunner.class)
public class InternetBackEndRestClientTest {

   @InjectMocks
   private InternetBackEndRestClient internetBackEndRestClient; 

   @Mock
   private Tracer tracer; 

   @Test
   public void generatePassworJwt_test() { 
      internetBackEndRestClient.generatePassworJwt(...);
      ....
   }
}

Может кто-нибудь помочь мне, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Вот решение, которое сработало для меня:

@RunWith(MockitoJUnitRunner.class)
public class InternetBackEndRestClientTest {

    private static final String TRACEID = "12345678901234567890123456789012";

    @InjectMocks
    private InternetBackEndRestClient internetBackEndRestClient;

    @Mock
    private Tracer tracer;
   @Mock
    private Span span;

    @Before
    public void setUp()  {

        MockitoAnnotations.initMocks(this);

        when(tracer.nextSpan()).thenReturn(span);
        when(tracer.nextSpan().name("spanPasswordJwtResponse"))
           .thenReturn(span);
        when(span.start()).thenReturn(span);

        Tracing tracing = Tracing.newBuilder().build();
        doReturn(tracing.tracer().withSpanInScope(span))
             .when(tracer).withSpanInScope(span);
        doNothing().when(span).finish();

        ...
    }
    ...
}
0 голосов
/ 07 октября 2018

Ваш пример не завершен, поэтому трудно определить все, что не совсем верно, но одна вещь заключается в том, что @MockBean будет работать только при использовании инфраструктуры тестирования Spring Boot.Это означает, что для запуска теста необходимо использовать SpringRunner, а также включить поддержку @MockBean.Наиболее распространенный способ сделать это с помощью @SpringBootTest:

@SpringBootTest
@RunWith(SpringRunner.class)
public class InternetBackEndRestClientTest {
    // …
}

Подробнее о @MockBean можно прочитать в справочной документации Spring Boot .

...