Я пытаюсь создать прототип, который использует gradle в качестве инструмента сборки и openjdk-11. Этот прототип будет создавать rest-api на платформе Springboot.
Мой модуль работает нормально с вызовом rest-api и возвращает ожидаемый результат . Однако, поскольку я сейчас пытаюсь написать тест для остальных API, этот тест не выполняется, так как Mockito возвращает пустой объект. Буду признателен за понимание того, как мне написать тест для этого rest-api или что нужно сделать, чтобы это исправить.
Мой контроллер:
@RestController
public class GreetingController {
private static final String template = "Hello, %s!";
private final AtomicLong counter = new AtomicLong();
@Autowired
GreetingService service;
@RequestMapping("/greeting")
public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) {
return service.getGreetings(0L, String.format(template, name));
}
}
Услуга:
@Service
public class GreetingService {
public Greeting getGreetings() {
return new Greeting(1L, "Hello World");
}
public Greeting getGreetings(Long id, String name) {
return new Greeting(id, name);
}
}
Модель:
@Builder
@Data
@RequiredArgsConstructor
@JsonDeserialize(builder = Greeting.class)
public class Greeting {
@NonNull
private Long id;
@NonNull
private String content;
}
Основной класс:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Я выполнил это:
gradle bootrun
А потом из браузера пробовал:
http://localhost:8080/greeting
И это вернулось:
{"id":0,"content":"Hello, World!"}
Снова попробовал:
http://localhost:8080/greeting?name=Patty
и что вернулось:
{"id":0,"content":"Hello, Patty!"}
Теперь я пытался написать тест для проверки API-вызовов, аналогично вышеуказанным вызовам программно. Итак, я попробовал:
@RunWith(MockitoJUnitRunner.class)
public class GreetingControllerTest {
private MockMvc mockMvc;
@Mock
private GreetingService service;
@InjectMocks
private GreetingController controller
@Test
public void testGreeting() throws Exception {
Greeting greeting = new Greeting(0L,"Patty!");
String expectedResponse = "{\"id\":0,\"content\":\"Hello, Patty!\"}";
//JacksonTester.initFields(this, new ObjectMapper());
mockMvc = MockMvcBuilders.standaloneSetup(controller)
.build();
Mockito.when(service.getGreetings(0L,"Patty")).thenReturn(greeting);
MockHttpServletResponse response = mockMvc
.perform(get("/greeting?name=Patty")
.contentType(MediaType.ALL))
.andReturn()
.getResponse();
assertThat(response.getStatus()).isEqualTo(HttpStatus.OK.value());
assertThat(response.getContentAsString()).isEqualTo(expectedResponse)
}
}
Сообщение об ошибке:
org.junit.ComparisonFailure:
Expected :"{"id":0,"content":"Hello, Patty!"}"
Actual :""
Отказ от этой строки:
assertThat(response.getContentAsString()).isEqualTo(expectedResponse)
Заранее спасибо.