Spring 可选的int参数';电影ID';存在,但无法转换为空值

Spring 可选的int参数';电影ID';存在,但无法转换为空值,spring,unit-testing,mockito,junit5,Spring,Unit Testing,Mockito,Junit5,我正在处理Maven多模块项目,因此这可能会导致生成错误? 我试图对控制器中的delete方法进行单元测试,但我不明白为什么会发生这种情况,因为类似于此方法的方法可以工作 异常本身就说明了问题-无法将int转换为null。但是为什么在curl看起来正确的地方有空值呢 {"timestamp":"2019-12-16T11:47:35.450+0000","path":"/movie-composite/1","status":500,"error":"Internal Server Error"

我正在处理Maven多模块项目,因此这可能会导致生成错误?

我试图对控制器中的delete方法进行单元测试,但我不明白为什么会发生这种情况,因为类似于此方法的方法可以工作

异常本身就说明了问题-无法将int转换为null。但是为什么在curl看起来正确的地方有空值呢

{"timestamp":"2019-12-16T11:47:35.450+0000","path":"/movie-composite/1","status":500,"error":"Internal Server Error","message":"Optional int parameter 'movieId' is present but cannot be translated into a null value due to being declared as a primitive type. Consider declaring it as object wrapper for the corresponding primitive type."}
Ho映射看起来像:

/**
 * Sample usage: curl $HOST:$PORT/movie-composite/1
 *
 * @param movieId
 */
@ApiOperation(
        value = "${api.movie-composite.delete-composite-movie.description}",
        notes = "${api.movie-composite.delete-composite-movie.notes}")
@ApiResponses(value = {
        @ApiResponse(code = 400, message = "Bad Request, invalid format of the request. See response message for more information."),
        @ApiResponse(code = 422, message = "Unprocessable entity, input parameters caused the processing to fails. See response message for more information.")
})
@DeleteMapping(
        value = "/movie-composite/{movieId}",
        produces = "application/json")
void deleteCompositeMovie(@PathVariable int movieId);
private void deleteAndVerify(int id, HttpStatus httpStatus) {
     webTestClient.delete()
            .uri("/movie-composite/" + id)
            .exchange()
            .expectStatus().isEqualTo(httpStatus);
}
@ExtendWith(SpringExtension.class)
@SpringBootTest(webEnvironment = RANDOM_PORT)
public class MovieCompositeServiceApplicationTests {

    public static final String FAKE_ADDRESS = "Fake address";
    public static final String FAKE_GENRE = "Fake genre";
    public static final String FAKE_TITLE = "Fake title";
    @Autowired
    WebTestClient webTestClient;

    @MockBean
    MovieCompositeIntegration movieCompositeIntegration;

    @MockBean
    BaseMovieCompositeService baseMovieCompositeService;

    @MockBean
    ServiceUtil serviceUtil;

    @Test
    void createMovie() {
        int movieId = 1;

        MovieAggregate movieAggregate = MovieAggregate.builder()
                .movieId(movieId)
                .genre(FAKE_GENRE)
                .title(FAKE_TITLE)
                .recommendations(getRecommendationSummaries())
                .reviews(getReviewSummaries())
                .serviceAddresses(null)
                .build();

        postAndVerify(movieAggregate);
    }

    @Test
    void getMovieById() {
        int given = 1;

        Movie movie = getMovies(given);

        Mockito.when(serviceUtil.getServiceAddress()).thenReturn("Fake service address");

        List<Recommendation> recommendations = getRecommendations(movie);
        List<Review> reviews = getReviews(movie);

        Mockito.when(movieCompositeIntegration.getMovie(given)).thenReturn(movie);
        Mockito.when(movieCompositeIntegration.getRecommendations(movie.getMovieId())).thenReturn(recommendations);
        Mockito.when(movieCompositeIntegration.getReviews(movie.getMovieId())).thenReturn(reviews);

        getAndVerifyMovie(given, HttpStatus.OK)
                .jsonPath("$.movieId").isEqualTo(given)
                .jsonPath("$.recommendations.length()").isEqualTo(3)
                .jsonPath("$.reviews.length()").isEqualTo(3);
    }

    @Test
    void getMovieByIdThrowsNotFoundException() {
        int given = 1;

        Mockito.when(movieCompositeIntegration.getMovie(given)).thenThrow(NotFoundException.class);

        getAndVerifyMovie(given, HttpStatus.NOT_FOUND)
                .jsonPath("$.path").isEqualTo("/movie-composite/" + given);
    }

    @Test
    void getMovieByIdThrowsInvalidInputException() {
        int given = 1;

        Mockito.when(movieCompositeIntegration.getMovie(given)).thenThrow(InvalidInputException.class);

        getAndVerifyMovie(given, HttpStatus.UNPROCESSABLE_ENTITY)
                .jsonPath("$.path").isEqualTo("/movie-composite/" + given);
    }

    @Test
    void deleteCompositeMovie() {
        int given = 1;

        deleteAndVerify(given, HttpStatus.OK);

        verify(baseMovieCompositeService, times(1)).deleteCompositeMovie(given);
    }

    private WebTestClient.BodyContentSpec getAndVerifyMovie(int id, HttpStatus status) {
        return webTestClient.get()
                .uri("/movie-composite/" + id)
                .accept(MediaType.APPLICATION_JSON_UTF8)
                .exchange()
                .expectStatus().isEqualTo(status)
                .expectHeader().contentType(MediaType.APPLICATION_JSON_UTF8)
                .expectBody();
    }

    private WebTestClient.BodyContentSpec postAndVerify(MovieAggregate movieAggregate) {
        return webTestClient.post()
                .uri("/movie-composite")
                .body(just(movieAggregate), MovieAggregate.class)
                .exchange()
                .expectStatus().isEqualTo(HttpStatus.OK)
                .expectBody();
    }

    private void deleteAndVerify(int id, HttpStatus httpStatus) {
         webTestClient.delete()
                .uri("/movie-composite/" + id)
                .exchange()
                .expectStatus().isEqualTo(httpStatus);
    }

    private List<ReviewSummary> getReviewSummaries() {
        return Collections.singletonList(ReviewSummary.builder().reviewId(1).subject("s").author("a").content("c").build());
    }

    private List<RecommendationSummary> getRecommendationSummaries() {
        return Collections.singletonList(RecommendationSummary.builder().recommendationId(1).author("a").content("c").rate(1).build());
    }

    private Movie getMovies(int given) {
        return Movie.builder().movieId(given).address(FAKE_ADDRESS).genre(FAKE_GENRE).title(FAKE_TITLE).build();
    }

    private List<Review> getReviews(Movie movie) {
        return Arrays.asList(
                Review.builder().movieId(movie.getMovieId()).reviewId(1).author("Author 1").subject("Subject 1").content("Content 1").serviceAddress(serviceUtil.getServiceAddress()).build(),
                Review.builder().movieId(movie.getMovieId()).reviewId(2).author("Author 2").subject("Subject 2").content("Content 2").serviceAddress(serviceUtil.getServiceAddress()).build(),
                Review.builder().movieId(movie.getMovieId()).reviewId(3).author("Author 2").subject("Subject 3").content("Content 3").serviceAddress(serviceUtil.getServiceAddress()).build()
        );
    }

    private List<Recommendation> getRecommendations(Movie movie) {
        return Arrays.asList(
                Recommendation.builder().movieId(movie.getMovieId()).recommendationId(1).author("Author 1").rate(1).content("Content 1").serviceAddress(serviceUtil.getServiceAddress()).build(),
                Recommendation.builder().movieId(movie.getMovieId()).recommendationId(2).author("Author 2").rate(2).content("Content 2").serviceAddress(serviceUtil.getServiceAddress()).build(),
                Recommendation.builder().movieId(movie.getMovieId()).recommendationId(3).author("Author 3").rate(3).content("Content 3").serviceAddress(serviceUtil.getServiceAddress()).build()
        );
    }

}
其执行:

@Override
public void deleteCompositeMovie(int movieId) {
    log.debug("deleteCompositeMovie will delete Movie, Reviews, Recommendations belonging to Movie with id: {}", movieId);

    movieCompositeIntegration.deleteMovie(movieId);
    movieCompositeIntegration.deleteReviews(movieId);
    movieCompositeIntegration.deleteRecommendations(movieId);

    log.debug("deleteCompositeMovie deleted Movie, Reviews, Recommendations belonging to Movie with id: {}", movieId);

}
最后是无法通过的测试:

@Test
void deleteCompositeMovie() {
    int given = 1;

    deleteAndVerify(given, HttpStatus.OK);

    verify(baseMovieCompositeService, times(1)).deleteCompositeMovie(given);
}
其中删除和验证(给定,HttpStatus.OK)如下所示:

/**
 * Sample usage: curl $HOST:$PORT/movie-composite/1
 *
 * @param movieId
 */
@ApiOperation(
        value = "${api.movie-composite.delete-composite-movie.description}",
        notes = "${api.movie-composite.delete-composite-movie.notes}")
@ApiResponses(value = {
        @ApiResponse(code = 400, message = "Bad Request, invalid format of the request. See response message for more information."),
        @ApiResponse(code = 422, message = "Unprocessable entity, input parameters caused the processing to fails. See response message for more information.")
})
@DeleteMapping(
        value = "/movie-composite/{movieId}",
        produces = "application/json")
void deleteCompositeMovie(@PathVariable int movieId);
private void deleteAndVerify(int id, HttpStatus httpStatus) {
     webTestClient.delete()
            .uri("/movie-composite/" + id)
            .exchange()
            .expectStatus().isEqualTo(httpStatus);
}
@ExtendWith(SpringExtension.class)
@SpringBootTest(webEnvironment = RANDOM_PORT)
public class MovieCompositeServiceApplicationTests {

    public static final String FAKE_ADDRESS = "Fake address";
    public static final String FAKE_GENRE = "Fake genre";
    public static final String FAKE_TITLE = "Fake title";
    @Autowired
    WebTestClient webTestClient;

    @MockBean
    MovieCompositeIntegration movieCompositeIntegration;

    @MockBean
    BaseMovieCompositeService baseMovieCompositeService;

    @MockBean
    ServiceUtil serviceUtil;

    @Test
    void createMovie() {
        int movieId = 1;

        MovieAggregate movieAggregate = MovieAggregate.builder()
                .movieId(movieId)
                .genre(FAKE_GENRE)
                .title(FAKE_TITLE)
                .recommendations(getRecommendationSummaries())
                .reviews(getReviewSummaries())
                .serviceAddresses(null)
                .build();

        postAndVerify(movieAggregate);
    }

    @Test
    void getMovieById() {
        int given = 1;

        Movie movie = getMovies(given);

        Mockito.when(serviceUtil.getServiceAddress()).thenReturn("Fake service address");

        List<Recommendation> recommendations = getRecommendations(movie);
        List<Review> reviews = getReviews(movie);

        Mockito.when(movieCompositeIntegration.getMovie(given)).thenReturn(movie);
        Mockito.when(movieCompositeIntegration.getRecommendations(movie.getMovieId())).thenReturn(recommendations);
        Mockito.when(movieCompositeIntegration.getReviews(movie.getMovieId())).thenReturn(reviews);

        getAndVerifyMovie(given, HttpStatus.OK)
                .jsonPath("$.movieId").isEqualTo(given)
                .jsonPath("$.recommendations.length()").isEqualTo(3)
                .jsonPath("$.reviews.length()").isEqualTo(3);
    }

    @Test
    void getMovieByIdThrowsNotFoundException() {
        int given = 1;

        Mockito.when(movieCompositeIntegration.getMovie(given)).thenThrow(NotFoundException.class);

        getAndVerifyMovie(given, HttpStatus.NOT_FOUND)
                .jsonPath("$.path").isEqualTo("/movie-composite/" + given);
    }

    @Test
    void getMovieByIdThrowsInvalidInputException() {
        int given = 1;

        Mockito.when(movieCompositeIntegration.getMovie(given)).thenThrow(InvalidInputException.class);

        getAndVerifyMovie(given, HttpStatus.UNPROCESSABLE_ENTITY)
                .jsonPath("$.path").isEqualTo("/movie-composite/" + given);
    }

    @Test
    void deleteCompositeMovie() {
        int given = 1;

        deleteAndVerify(given, HttpStatus.OK);

        verify(baseMovieCompositeService, times(1)).deleteCompositeMovie(given);
    }

    private WebTestClient.BodyContentSpec getAndVerifyMovie(int id, HttpStatus status) {
        return webTestClient.get()
                .uri("/movie-composite/" + id)
                .accept(MediaType.APPLICATION_JSON_UTF8)
                .exchange()
                .expectStatus().isEqualTo(status)
                .expectHeader().contentType(MediaType.APPLICATION_JSON_UTF8)
                .expectBody();
    }

    private WebTestClient.BodyContentSpec postAndVerify(MovieAggregate movieAggregate) {
        return webTestClient.post()
                .uri("/movie-composite")
                .body(just(movieAggregate), MovieAggregate.class)
                .exchange()
                .expectStatus().isEqualTo(HttpStatus.OK)
                .expectBody();
    }

    private void deleteAndVerify(int id, HttpStatus httpStatus) {
         webTestClient.delete()
                .uri("/movie-composite/" + id)
                .exchange()
                .expectStatus().isEqualTo(httpStatus);
    }

    private List<ReviewSummary> getReviewSummaries() {
        return Collections.singletonList(ReviewSummary.builder().reviewId(1).subject("s").author("a").content("c").build());
    }

    private List<RecommendationSummary> getRecommendationSummaries() {
        return Collections.singletonList(RecommendationSummary.builder().recommendationId(1).author("a").content("c").rate(1).build());
    }

    private Movie getMovies(int given) {
        return Movie.builder().movieId(given).address(FAKE_ADDRESS).genre(FAKE_GENRE).title(FAKE_TITLE).build();
    }

    private List<Review> getReviews(Movie movie) {
        return Arrays.asList(
                Review.builder().movieId(movie.getMovieId()).reviewId(1).author("Author 1").subject("Subject 1").content("Content 1").serviceAddress(serviceUtil.getServiceAddress()).build(),
                Review.builder().movieId(movie.getMovieId()).reviewId(2).author("Author 2").subject("Subject 2").content("Content 2").serviceAddress(serviceUtil.getServiceAddress()).build(),
                Review.builder().movieId(movie.getMovieId()).reviewId(3).author("Author 2").subject("Subject 3").content("Content 3").serviceAddress(serviceUtil.getServiceAddress()).build()
        );
    }

    private List<Recommendation> getRecommendations(Movie movie) {
        return Arrays.asList(
                Recommendation.builder().movieId(movie.getMovieId()).recommendationId(1).author("Author 1").rate(1).content("Content 1").serviceAddress(serviceUtil.getServiceAddress()).build(),
                Recommendation.builder().movieId(movie.getMovieId()).recommendationId(2).author("Author 2").rate(2).content("Content 2").serviceAddress(serviceUtil.getServiceAddress()).build(),
                Recommendation.builder().movieId(movie.getMovieId()).recommendationId(3).author("Author 3").rate(3).content("Content 3").serviceAddress(serviceUtil.getServiceAddress()).build()
        );
    }

}
完整的测试文件如下所示:

/**
 * Sample usage: curl $HOST:$PORT/movie-composite/1
 *
 * @param movieId
 */
@ApiOperation(
        value = "${api.movie-composite.delete-composite-movie.description}",
        notes = "${api.movie-composite.delete-composite-movie.notes}")
@ApiResponses(value = {
        @ApiResponse(code = 400, message = "Bad Request, invalid format of the request. See response message for more information."),
        @ApiResponse(code = 422, message = "Unprocessable entity, input parameters caused the processing to fails. See response message for more information.")
})
@DeleteMapping(
        value = "/movie-composite/{movieId}",
        produces = "application/json")
void deleteCompositeMovie(@PathVariable int movieId);
private void deleteAndVerify(int id, HttpStatus httpStatus) {
     webTestClient.delete()
            .uri("/movie-composite/" + id)
            .exchange()
            .expectStatus().isEqualTo(httpStatus);
}
@ExtendWith(SpringExtension.class)
@SpringBootTest(webEnvironment = RANDOM_PORT)
public class MovieCompositeServiceApplicationTests {

    public static final String FAKE_ADDRESS = "Fake address";
    public static final String FAKE_GENRE = "Fake genre";
    public static final String FAKE_TITLE = "Fake title";
    @Autowired
    WebTestClient webTestClient;

    @MockBean
    MovieCompositeIntegration movieCompositeIntegration;

    @MockBean
    BaseMovieCompositeService baseMovieCompositeService;

    @MockBean
    ServiceUtil serviceUtil;

    @Test
    void createMovie() {
        int movieId = 1;

        MovieAggregate movieAggregate = MovieAggregate.builder()
                .movieId(movieId)
                .genre(FAKE_GENRE)
                .title(FAKE_TITLE)
                .recommendations(getRecommendationSummaries())
                .reviews(getReviewSummaries())
                .serviceAddresses(null)
                .build();

        postAndVerify(movieAggregate);
    }

    @Test
    void getMovieById() {
        int given = 1;

        Movie movie = getMovies(given);

        Mockito.when(serviceUtil.getServiceAddress()).thenReturn("Fake service address");

        List<Recommendation> recommendations = getRecommendations(movie);
        List<Review> reviews = getReviews(movie);

        Mockito.when(movieCompositeIntegration.getMovie(given)).thenReturn(movie);
        Mockito.when(movieCompositeIntegration.getRecommendations(movie.getMovieId())).thenReturn(recommendations);
        Mockito.when(movieCompositeIntegration.getReviews(movie.getMovieId())).thenReturn(reviews);

        getAndVerifyMovie(given, HttpStatus.OK)
                .jsonPath("$.movieId").isEqualTo(given)
                .jsonPath("$.recommendations.length()").isEqualTo(3)
                .jsonPath("$.reviews.length()").isEqualTo(3);
    }

    @Test
    void getMovieByIdThrowsNotFoundException() {
        int given = 1;

        Mockito.when(movieCompositeIntegration.getMovie(given)).thenThrow(NotFoundException.class);

        getAndVerifyMovie(given, HttpStatus.NOT_FOUND)
                .jsonPath("$.path").isEqualTo("/movie-composite/" + given);
    }

    @Test
    void getMovieByIdThrowsInvalidInputException() {
        int given = 1;

        Mockito.when(movieCompositeIntegration.getMovie(given)).thenThrow(InvalidInputException.class);

        getAndVerifyMovie(given, HttpStatus.UNPROCESSABLE_ENTITY)
                .jsonPath("$.path").isEqualTo("/movie-composite/" + given);
    }

    @Test
    void deleteCompositeMovie() {
        int given = 1;

        deleteAndVerify(given, HttpStatus.OK);

        verify(baseMovieCompositeService, times(1)).deleteCompositeMovie(given);
    }

    private WebTestClient.BodyContentSpec getAndVerifyMovie(int id, HttpStatus status) {
        return webTestClient.get()
                .uri("/movie-composite/" + id)
                .accept(MediaType.APPLICATION_JSON_UTF8)
                .exchange()
                .expectStatus().isEqualTo(status)
                .expectHeader().contentType(MediaType.APPLICATION_JSON_UTF8)
                .expectBody();
    }

    private WebTestClient.BodyContentSpec postAndVerify(MovieAggregate movieAggregate) {
        return webTestClient.post()
                .uri("/movie-composite")
                .body(just(movieAggregate), MovieAggregate.class)
                .exchange()
                .expectStatus().isEqualTo(HttpStatus.OK)
                .expectBody();
    }

    private void deleteAndVerify(int id, HttpStatus httpStatus) {
         webTestClient.delete()
                .uri("/movie-composite/" + id)
                .exchange()
                .expectStatus().isEqualTo(httpStatus);
    }

    private List<ReviewSummary> getReviewSummaries() {
        return Collections.singletonList(ReviewSummary.builder().reviewId(1).subject("s").author("a").content("c").build());
    }

    private List<RecommendationSummary> getRecommendationSummaries() {
        return Collections.singletonList(RecommendationSummary.builder().recommendationId(1).author("a").content("c").rate(1).build());
    }

    private Movie getMovies(int given) {
        return Movie.builder().movieId(given).address(FAKE_ADDRESS).genre(FAKE_GENRE).title(FAKE_TITLE).build();
    }

    private List<Review> getReviews(Movie movie) {
        return Arrays.asList(
                Review.builder().movieId(movie.getMovieId()).reviewId(1).author("Author 1").subject("Subject 1").content("Content 1").serviceAddress(serviceUtil.getServiceAddress()).build(),
                Review.builder().movieId(movie.getMovieId()).reviewId(2).author("Author 2").subject("Subject 2").content("Content 2").serviceAddress(serviceUtil.getServiceAddress()).build(),
                Review.builder().movieId(movie.getMovieId()).reviewId(3).author("Author 2").subject("Subject 3").content("Content 3").serviceAddress(serviceUtil.getServiceAddress()).build()
        );
    }

    private List<Recommendation> getRecommendations(Movie movie) {
        return Arrays.asList(
                Recommendation.builder().movieId(movie.getMovieId()).recommendationId(1).author("Author 1").rate(1).content("Content 1").serviceAddress(serviceUtil.getServiceAddress()).build(),
                Recommendation.builder().movieId(movie.getMovieId()).recommendationId(2).author("Author 2").rate(2).content("Content 2").serviceAddress(serviceUtil.getServiceAddress()).build(),
                Recommendation.builder().movieId(movie.getMovieId()).recommendationId(3).author("Author 3").rate(3).content("Content 3").serviceAddress(serviceUtil.getServiceAddress()).build()
        );
    }

}
@ExtendWith(SpringExtension.class)
@SpringBootTest(webEnvironment=RANDOM_端口)
公共类MovieCompositeServiceApplicationTests{
公共静态最终字符串FAKE_ADDRESS=“FAKE ADDRESS”;
公共静态最终字符串FAKE_GENRE=“FAKE GENRE”;
公共静态最终字符串FAKE_TITLE=“FAKE TITLE”;
@自动连线
WebTestClient-WebTestClient;
@蚕豆
电影合成集成电影合成集成;
@蚕豆
BaseMovieCompositeService BaseMovieCompositeService;
@蚕豆
ServiceUtil ServiceUtil;
@试验
void createMovie(){
int movieId=1;
MovieAggregate MovieAggregate=MovieAggregate.builder()
.电影ID(电影ID)
.体裁(假体裁)
.头衔(假头衔)
.建议(getRecommendationSummaries())
.reviews(getReviewSummaries())
.serviceAddresses(空)
.build();
邮资核实(影集);
}
@试验
void getMovieById(){
给定的int=1;
电影=获取电影(给定);
Mockito.when(serviceUtil.getServiceAddress())。然后返回(“假服务地址”);
列表建议=获取建议(电影);
列表评论=获取评论(电影);
Mockito.when(movieCompositeIntegration.getMovie(given)).thenReturn(movie);
Mockito.when(movieCompositeIntegration.getRecommendations(movie.getMovieId())。然后返回(recommendations);
Mockito.when(movieCompositeIntegration.getReviews(movie.getMovieId())。然后返回(reviews);
getAndVerifyMovie(给定,HttpStatus.OK)
.jsonPath(“$.movieId”).isEqualTo(给定)
.jsonPath(“$.recommendations.length()”).isEqualTo(3)
.jsonPath(“$.reviews.length()”).isEqualTo(3);
}
@试验
void getMovieByIdThrowsNotFoundException(){
给定的int=1;
Mockito.when(movieCompositeIntegration.getMovie(给定)).thenthow(NotFoundException.class);
getAndVerifyMovie(给定,HttpStatus.NOT_FOUND)
.jsonPath(“$.path”).isEqualTo(“/movie composite/”+给定);
}
@试验
void getMovieByIdThrowsInvalidInputException()无效{
给定的int=1;
Mockito.when(movieCompositeIntegration.getMovie(给定)).thenthow(InvalidInputException.class);
getAndVerifyMovie(给定,HttpStatus.UNPROCESSABLE_实体)
.jsonPath(“$.path”).isEqualTo(“/movie composite/”+给定);
}
@试验
void deleteCompositeMovie(){
给定的int=1;
删除和验证(给定,HttpStatus.OK);
验证(baseMovieCompositeService,次(1)).DeleteCompositeService(给定);
}
私有WebTestClient.BodyContentSpec getAndVerifyMovie(int id,HttpStatus状态){
返回webTestClient.get()
.uri(“/movie composite/”+id)
.accept(MediaType.APPLICATION\u JSON\u UTF8)
.exchange()
.expectStatus().isEqualTo(状态)
.expectHeader().contentType(MediaType.APPLICATION\u JSON\u UTF8)
.expectBody();
}
私有WebTestClient.BodyContentSpec postAndVerify(MovieAggregate MovieAggregate){
返回webTestClient.post()
.uri(“/movie composite”)
.body(just(movieAggregate)、movieAggregate.class)
.exchange()
.expectStatus().isEqualTo(HttpStatus.OK)
.expectBody();
}
私有void deleteAndVerify(int-id,HttpStatus-HttpStatus){
webTestClient.delete()
.uri(“/movie composite/”+id)
.exchange()
.expectStatus().isEqualTo(httpStatus);
}
私有列表getReviewSummaries(){
return Collections.singletonList(ReviewSummary.builder().reviewId(1).subject(“s”).author(“a”).content(“c”).build());
}
私有列表getRecommendationSummaries(){
return Collections.singletonList(RecommendationSummary.builder().recommendationId(1).author(“a”).content(“c”).rate(1.build());
}
私人电影getMovies(给定int){
返回Movie.builder();
}
私人列表getReviews(电影){
返回数组.asList(
Review.builder().movieId(movie.getMovieId()).reviewId(1).作者(“作者1”).主题(“主题1”).content(“内容1”).serviceAddress(serviceUtil.getServiceAddress()).build(),
Review.builder().movieId(movie.getMovieId()).reviewId(2).作者(“作者2”).主题(“主题2”).content(“内容2”).serviceAddress(serviceUtil.getServiceAddress()).build(),
Review.builder().movieId(movie.getMovieId()).reviewId(3).作者(“作者2”).主题(“主题3”).内容(“内容3”).服务地址(serviceUtil.getServiceAddress()).build()
);
}
私人列表获取推荐(电影){
返回数组.asList(
Recommendation.builder().movieId(movie.getMovieId()).recommendationId(1).作者(“作者1”).rate(1).内容(“内容1”).serviceAddress(serviceUtil.getServiceAddress()).build(),
Recommendation.builder().movieId(movie.getMovieId()).recommendationId(2).作者(“作者2”).rate(2).内容(“内容2