Не могу вернуть объект класса с Mockito

я пытаюсь написать модульный тест, и для этого япишу заявление когда для Mockito, но я могуКажется, я получаю затмение, чтобы признать, что возвращаемое значение действительно.

Вот'что яя делаю:

Class userClass = User.class;
when(methodParameter.getParameterType()).thenReturn(userClass);

Тип возврата.getParameterType() являетсяClassтак что я нене понимаю, почему затмение говорит,The method thenReturn(Class) in the type OngoingStubbing is not applicable for the arguments (Class), Он предлагает привести мой пользовательский класс, но это просто заставляет некоторые искаженные вещи затмить, что ему нужно снова привести (и можетT Cast).

Это просто проблема с Eclipse или я что-то не так делаю?

Ответы на вопрос(5)

Решение Вопроса

Кроме того, несколько более краткий способ обойти это - использовать синтаксис do вместо когда.

doReturn(User.class).when(methodParameter).getParameterType();
 Prasanna Mondkar17 апр. 2017 г., 08:55
Круто ... да, самое чистое решение. Большое спасибо.
 Scott26 авг. 2015 г., 22:45
Это самое чистое решение.
 Tomasz Kalkosiński13 авг. 2014 г., 12:42
Отличный совет! Это должно быть принято!

я не уверен, почему тыполучаю эту ошибку. Это должно быть что-то особенное, чтобы вернутьсяClass, Ваш код компилируется нормально, если вы вернетесьClass, Это симуляция того, что выделаешь и этот тест проходит. Я думаю, что это будет работать и для вас

package com.sandbox;

import org.junit.Test;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;

import static org.mockito.Mockito.*;

import static junit.framework.Assert.assertEquals;

public class SandboxTest {

    @Test
    public void testQuestionInput() {
        SandboxTest methodParameter = mock(SandboxTest.class);
        final Class userClass = String.class;
        when(methodParameter.getParameterType()).thenAnswer(new Answer() {
            @Override
            public Object answer(InvocationOnMock invocationOnMock) throws Throwable {
                return userClass;
            }
        });

        assertEquals(String.class, methodParameter.getParameterType());
    }

    public Class getParameterType() {
        return null;
    }


}
 Christian20 сент. 2018 г., 21:46
Спасибо за это. Это'Еще лучше с сегодняшними лямбдами: когда (methodParameter.getParameterType ()). thenAnswer ((Ответ <Объект>) invocationOnMock -> String.class);
 michaelok27 окт. 2016 г., 22:15
Оригинальный плакат нене говоря уже о том, какой JDK он использовал, но я полагаю, что это связано с более строгой проверкой типов в Java 8, и поэтомуэто может быть из-за затмения или Intellij. Я'Мы столкнулись с этой проблемой, немного обновляя тесты рабочих модулей (хотя и полные @SuppressWarnings для необработанных типов) с Java 7 на Java 8. Подробнее здесь:mail.openjdk.java.net/pipermail/compiler-dev/2013-November/...
 Michael Simons05 февр. 2015 г., 10:03
То же самое в NetBeans.
 LoreV28 июл. 2016 г., 09:31
То же самое в Intellij Idea
 Daniel Kaplan03 июн. 2013 г., 07:19
@CorayThan It 'не затмение. Это неКомпилировать в Intellij тоже нет.
 CorayThan03 июн. 2013 г., 07:04
Да, похоже, что это проблема с затмением или мокито. Я смог реализовать ваше предложение, и это обошло проблему, так что спасибо!
Class userClass = User.class;
OngoingStubbing ongoingStubbing = Mockito.when(methodParameter.getParameterType());
ongoingStubbing.thenReturn(userClass);

OngoingStubbing вернулсяMockito.when не тот же тип, что иongoingStubbing потому что каждый "?" Подстановочный знак может быть связан с другим типом.

Чтобы типы соответствовали, вам нужно явно указать параметр типа:

Class userClass = User.class;
Mockito.when(methodParameter.getParameterType()).thenReturn(userClass);
 Tobias Sarnow07 июл. 2014 г., 11:57
Часть:Mockito.when был ключ. Спасибо за ответ.
 Paul Warren19 нояб. 2016 г., 01:22
По моему мнению, использование явной типизации является более элегантным решением, чем проголосовавшая в настоящее времяправильный' answerI»

Я нашел здесь примеры кода, которые немного путают с использованием метода methodParameter.getParameterType (), впервые использованного в принятом ответе.s SandBoxTest. После того, как я немного покопался, я нашелдругая тема, относящаяся к этой проблеме это обеспечило лучший пример. Этот пример прояснил, что вызов Mockito, в котором я нуждался, был doReturn (myExpectedClass) .when (myMock) .callsMyMethod (withAnyParams). Использование этой формы позволяет мне издеваться над возвращением класса. Надеемся, что эта заметка поможет кому-то, кто ищет подобную проблему в будущем.

Вы можете просто удалить из класса))

Class userClass = User.class;
when(methodParameter.getParameterType()).thenReturn(userClass);

Ваш ответ на вопрос