Не удалось загрузить ApplicationContext - PullRequest
0 голосов
/ 09 февраля 2019

Я новичок в тестировании.Я создал контрольный пример для тестирования API покоя с помощью JUNIT Mockito.В моем коде я создал тест для метода itemGetByid (), но когда я запускаю тест, я получаю сообщение об ошибке ApplocationContext.Я не знаю, где я иду не так.

Item Controller Test class
    package com.example.demo.controller;

    import com.example.demo.entities.Item;
    import com.example.demo.entities.User;
    import com.example.demo.service.ItemService;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.mockito.InjectMocks;
    import org.mockito.Mock;
    import org.mockito.Mockito;
    import org.mockito.stubbing.Answer;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    import org.springframework.test.context.junit4.SpringRunner;
    import org.springframework.test.web.servlet.MockMvc;
    import java.util.*;
    import static org.junit.Assert.*;

    @RunWith(SpringJUnit4ClassRunner.class)

    @WebMvcTest(ItemController.class)
    public class ItemControllerTest {

        @Autowired
        MockMvc mockmvc;
        @Mock
        ItemService itemService;
        @InjectMocks
        ItemController itemController;

        @Test
        public void itemGetById() {

            Item item = new Item();
            Mockito.when(itemController.getById(10L)).thenReturn(item);
            Item i = itemController.getById(10L);
            assertEquals(i, item);

        }
    }

    Item entity class
    package com.example.demo.entities;

    import lombok.Data;
    import javax.persistence.*;

    @Data
    @Entity
    @Table(name = "Item")
    public class Item {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long itemId;
        private Long customerId;
        private String itemName;
        private int itemPrice;

    }
    Item controller
    package com.example.demo.controller;

    import com.example.demo.entities.Item;
    import com.example.demo.entities.User;
    import com.example.demo.service.ItemService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.*;

    @RestController
    @RequestMapping("item")
    public class ItemController {

        private ItemService itemService;

        @Autowired
        public ItemController(ItemService itemService) {
            this.itemService = itemService;
        }

        @PostMapping("/post")
        public Item post(@RequestBody Item item) {
            return itemService.post(item);
        }

        @GetMapping
        public Iterable<Item> getAll() {
            return itemService.get();
        }

        @GetMapping("/get")
        public Item getById(Long id) {
            return itemService.getItem(id);
        }

        @DeleteMapping("/delete")
        public void deleteAll() {
            itemService.deleteAll();
        }

    }

    Item Service
    package com.example.demo.service;

    import com.example.demo.entities.Item;
    import com.example.demo.userepository.ItemRepository;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import org.springframework.web.bind.annotation.RequestBody;

    @Service
    public class ItemService {
        ItemRepository itemRepository;

        @Autowired
        public ItemService(ItemRepository itemRepository) {

            this.itemRepository = itemRepository;
        }

        public Item post(@RequestBody Item item) {
            return itemRepository.save(item);
        }

        public Iterable<Item> get() {
            return itemRepository.findAll();
        }

        public void deleteAll() {
            itemRepository.deleteAll();
        }

        public Item getItem(Long id) {
            return itemRepository.findById(id).get();
        }

    }

    Item Repository
    package com.example.demo.userepository;

    import com.example.demo.entities.Item;
    import org.springframework.data.repository.CrudRepository;
    import org.springframework.stereotype.Repository;

    @Repository
    public interface ItemRepository extends CrudRepository<Item, Long> {
    } 

1 Ответ

0 голосов
/ 10 февраля 2019

Для начала вы используете SpringJUnit4ClassRunner.Попробуйте MockitoJunitRunner.Экземпляр ItemController никогда не создается в тесте, поэтому его также необходимо исправить.В строке ниже произойдет сбой, поскольку itemController не является макетом.

**Mockito.when(itemController.getById(10L)).thenReturn(item);**

Если itemController преобразуется в макет, с помощью оператора when метод test ничего не проверяет, потому что тест сообщает Mockito вернуть элемент вкогда заявление.Предполагая, что целью является проверка метода getById ItemController, инструкция Mockito.when должна описывать вызов Mock ItemService.

...