Тестирование условно инициализированного RestController на основе активного профиля - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть следующий класс, который загружается в зависимости от профиля. Я хочу, чтобы он загружался только для помощи в более низких средах, а не на производстве:

@RestController
@RequestMapping("/foo")
@Profile("!prod")
public class FooController {

    private Bar bar;

    @PostMapping
    public ResponseEntity<?> createFoo(){
        bar.something();
        return new ResponseEntity<Object>(HttpStatus.ACCEPTED);
    }
}

Я хотел бы провести следующие тесты для этого класса:

@WebMvcTest
@RunWith(SpringRunner.class)
@ActiveProfiles("prod")
public class FooControllerTest {

    private MockMvc mockMvc;

    @Mock
    private Bar bar;

    @InjectMocks
    private FooController subjectUnderTest;

    @Before
    public void init(){
        mockMvc = MockMvcBuilders
                .standaloneSetup(subjectUnderTest)
                .build();
    }

@Test
public void givenProdProfile_whenCreateFoo_thenNotFoundResponseReturned() throws Exception {
        doNothing().when(mockBar).something();

        mockMvc.perform(MockMvcRequestBuilders
                .post("/foo"))
                .andExpect(status().isNotFound());
    }

, а затем еще один тестовый класс для проверки этого случая с @ActiveProfile ('non-prod'):

  • GivenNonProdProfile_whenCreateFoo_thenAcceptedResponseReturned

Я не совсем понимаю, как правильно это проверить. Я перепробовал много разных подходов, и ни один из них, похоже, не тестировал класс должным образом. Я пытался аннотировать свой тестовый класс с помощью @ActiveProfile и др. c.

Я думаю, суть моего вопроса в том, как я могу тестировать различные профили с помощью Mock Mvc и Mockito?

...