有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

getHeaders()无法返回java Mockito测试SimpMessageHeaderAccessor getHeaders()应返回MessageHeaders

如何编写单元测试,因为它包括内部调用其他方法

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 cannot be returned by getHeaders() getHeaders() should return MessageHeaders If you're unsure why you're getting above error read on. Due to the nature of the syntax above problem might occur because: 1. This exception might occur in wrongly written multi-threaded tests. Please refer to Mockito FAQ on limitations of concurrency testing. 2. A spy is stubbed using when(spy.foo()).then() syntax. It is safer to stub spies - - with doReturn|Throw() family of methods. More in javadocs for Mockito.spy() method.

消息是一个接口,我将其模拟为一个实例,但它根本无法获取标题,它是一个模拟。。。我怎样才能解决这个问题


共 (0) 个答案