Как написать модульный тест, потому что он включает внутренний вызов другого метода.
public class MyService implements UserDestinationResolver {
@Override
public UserDestinationResult myMethod(Message<?> message){
SimpMessageHeaderAccessor accessor = MessageHeaderAccessor.getAccessor(message, SimpMessageHeaderAccessor.class);
****some logics to use access to get the return value UserDestinationResult***
return UserDestinationResult;
getAccessor - это статический метод из класса MessageHeaderAccessor
@Nullable
public static <T extends MessageHeaderAccessor> T getAccessor(Message<?> message, Class<T> requiredType) {
return getAccessor(message.getHeaders(), requiredType);
}
вот мой тестовый пример:
@RunWith(MockitoJUnitRunner.class)
public class MyServiceTest {
@Mock
private Message<?> message;
private SimpMessageHeaderAccessor accessor;
@Mock
private UserDestinationResult userDestinationResult;
@InjectMocks
private MyService myService;
@Before
public void set_up(){
accessor = SimpMessageHeaderAccessor.wrap(message);
}
@Test
public void resolveDestination(){
when(MessageHeaderAccessor.getAccessor(message,
SimpMessageHeaderAccessor.class)).thenReturn(accessor);
"""""""""""""""""""""""""""""""
assertEquals(excepted, actual);
}
Ошибка происходит:
SimpMessageHeaderAccessor не может быть возвращен getHeaders ()
getHeaders () должен вернуть MessageHeaders
Если вы не уверены, почему получаете ошибку выше, читайте дальше. Из-за
Природа синтаксиса выше проблемы может возникнуть из-за:
1. Это исключение может возникнуть в неправильно написанных многопоточных тестах. Пожалуйста, обратитесь к FAQ по ограничениям параллелизма.
тестирование.
2. Шпион заглушается с использованием синтаксиса when (spy.foo ()). Then (). Безопаснее шпионить шпионов -
- с помощью семейства методов doReturn | Throw (). Больше в javadocs для метода Mockito.spy ().
Сообщение - это интерфейс, я его высмеиваю как пример, но он вообще не может получить заголовки, это издевательство ... как я могу решить эту проблему ...