Я новичок в тестировании. В приведенном ниже коде я хочу, чтобы первый тест 'test_sum_mock ()' использовал фиктивный бин, а второй метод использовал шпионский бин.
CalculatorRestControllerTests
@RunWith(SpringRunner.class)
@WebMvcTest(CalculatorRestController.class)
public class CalculatorRestControllerTests {
@Autowired
private MockMvc mockMvc;
@MockBean
private Calculator calculatorMock;
@SpyBean
private CalculatorImpl calculatorSpy;
@Test
public void test_sum_mock() throws Exception {
when(calculatorMock.sum(anyInt(), anyInt())).thenReturn(300);
RequestBuilder requestBuilder = post("/sum?a=100&b=200");
mockMvc.perform(requestBuilder).andExpect(status().isOk()).andExpect(content().string("300"));
}
@Test
public void test_sum_spy() throws Exception {
RequestBuilder requestBuilder = post("/sum?a=100&b=301");
mockMvc.perform(requestBuilder).andExpect(status().isOk()).andExpect(content().string("401"));
}
}
CalculatorRestController
@RestController
public class CalculatorRestController {
private final Calculator calculator;
public CalculatorRestController(Calculator calculator) {
this.calculator = calculator;
}
@PostMapping("/sum")
public Integer sum(@RequestParam Integer a, @RequestParam Integer b) {
return calculator.sum(a, b);
}
}
КогдаЯ запускаю эти тесты, я получаю
Не удалось загрузить ApplicationContext
, что имеет смысл. Я хочу, чтобы каждый метод тестирования как-то менял профиль ... Есть ли подобный способ сделать это?