Как смоделировать @Autowired HttpServletRequest в классе Service Test? - PullRequest
1 голос
/ 08 ноября 2019

В моем классе обслуживания у меня есть @Autowired HttpServletRequest и я использую тот же объект в моем методе обслуживания, но для этого класса тестирования метода обслуживания я не могу смоделировать объект HttpServletRequest в моем тестовом методе, пожалуйста, проверьте код ниже. Я получаю исключение Null Pointer для объекта запроса

    @Component("someServiceClass")
    public class SomeServiceClassImpl implements SomeServiceClass {

        @Autowired
        private HttpServletRequest request;

        @Autowired
        private HttpServletResponse response;

        @Override
        public void method(String id) {
            String param = request.getParameter("param");
// Here i am getting request object as null
        }

    }
    public class SomeServiceClassImplTest {

        @Mock
        private HttpServletRequest request;

        @Mock
        private HttpServletResponse response;

        @InjectMocks
        private SomeServiceClassImpl someServiceClass;

        @Before
        public void setup() {
            MockitoAnnotations.initMocks(this);
        }

        @Test
        public void methodTest() {
            Mockito.when(request.getParameter(Mockito.any())).thenReturn("dm");

        }

    }

Ответы [ 3 ]

1 голос
/ 08 ноября 2019

Кажется, что ваш класс пропускает аннотацию @RunWith, поэтому макеты не инициализируются

add @RunWith(MockitoJUnitRunner.class) (или SpringRunner), это решит это.

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

1 голос
/ 08 ноября 2019

Вызывается ли метод setup ()?

Не следует ли добавить аннотацию @RunWith, чтобы указать исполнителя, который будет выполнять метод, помеченный как @Before?

. Например,., вы можете пометить свой класс как @RunWith(MockitoJUnitRunner.class)

0 голосов
/ 14 ноября 2019

инициализировали ли вы эти фиктивные объекты? В противном случае вы получили исключение Null Pointer

  @Before public void initMocks() {
   MockitoAnnotations.initMocks(this);

}

...