Использование mockito с пружинной защитой для юнит-тестирования - PullRequest
0 голосов
/ 25 апреля 2020

В настоящее время я пытаюсь выполнить некоторые модульные тесты на моем весеннем REST API, который защищен с помощью Spring Security, так как мне нужен контекст моего веб-приложения внутри моего тестового класса, и так как я запускаю его с SpringJUnit4ClassRunner.class, я не очень уверен, как мне перейти к использованию mockito, если я не могу запустить его с mockitojunitrunner.

Вот мой тестовый класс

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "file:src/test/java/resources/ProductCRUD-servlet.xml")
@WebAppConfiguration
public class ProductControllerTest
{

    @Autowired
    WebApplicationContext context;

    @InjectMocks
    private ProductRestController productRestController;

    @Mock
    private ProductService productService;

    private MockMvc mockMvc;

    @Before
    public void setup()
    {
        MockitoAnnotations.initMocks(this);
        mockMvc = MockMvcBuilders
                .webAppContextSetup(context)
                .apply(springSecurity())
                .build();
    }

    @Test
    @WithMockUser(username = "test", password = "123")
    public void getAllProductsTest() throws Exception
    {
        List<Product> products = new ArrayList<>();
        products.add(new Product("4532", 123, "Product test", "test"));
        Mockito.when(productService.getProducts())
                .thenReturn(products);
        mockMvc.perform(MockMvcRequestBuilders
                .get("/product/list/getProducts"))
                .andExpect(status().isOk())
                .andExpect(content().string(containsString("\"productId\":\"4534\"")));
    }

Как и ожидалось, mockito Mockito.when не издевается что угодно, и этот вызов API на самом деле возвращает мои реальные данные, но я не хочу делать интеграционные тесты, есть идеи, как можно использовать mockito с springjunit?

...