spring 为什么我的测试没有通过,我得到org.opentest4j.AssertionFailedError

7gyucuyw  于 2023-03-28  发布在  Spring
关注(0)|答案(1)|浏览(108)

我正在参加Spring Academy的Sping Boot 课程,以构建RESTFUL CashCard家族API。但当我编写测试时,我得到了一个意想不到的结果。
这是我的CashCard实体类

package com.stephane.cashcard.Entity;

public class CashCard {
    public CashCard(Long cardId, Double amount){}
}

我的CashCardController类

package com.stephane.cashcard.Controller;

import com.stephane.cashcard.Entity.CashCard;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/cashcards")
public class CashCardController {
    @GetMapping("/{requestedId}")
    public ResponseEntity<CashCard> findById() {
        CashCard cashCard = new CashCard(99L, 0.0);
        return ResponseEntity.ok(cashCard);
    }
}

最后是CashCardApplicationTests类

package com.stephane.cashcard;

import com.jayway.jsonpath.DocumentContext;
import com.jayway.jsonpath.JsonPath;
import com.stephane.cashcard.Entity.CashCard;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.client.TestRestTemplate;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;

import static org.assertj.core.api.Assertions.assertThat;

/**
 * Cela démarrera notre application Spring Boot
 * et la rendra disponible pour que notre test
 * puisse y effectuer des requêtes.
 */
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class CashCardApplicationTests {

    /**
     * Injection Du module TestRestTemplate qui permettra
     * de faire des requêtes HTTP à l'application en cours d'execution
     *
     */
    @Autowired
    TestRestTemplate restTemplate;

    @Test
    void returnCashCardWhenDataIsSaved(){
        /**
         * Here we use restTemplate to make an HTTP GET request to our application endpoint /cashcards/99.
         *
         * restTemplate will return a ResponseEntity, which we've captured in a variable we've named response.
         * ResponseEntity is another helpful Spring object that provides valuable information
         * about what happened with our request. We will use this information throughout out tests in this course.
         */
        ResponseEntity<String> response = restTemplate.getForEntity("/cashcards/99", String.class);

        /**
         * We can inspect many aspects of the response, including the HTTP
         * Response Status code, which we expect to be 200 OK.
         */
        assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);

        //Convertir la reponse qui est un String en un objet JSON
        DocumentContext documentContext = JsonPath.parse(response.getBody());


        /**
         * Nous attendons à ce que lorsque nous demandons
         * un cashCard avec l'identifiant 99, un Objet
         * JSON soit retourné avec quelque chose dans le champs id.
         *
         * Nous nous assurons par la suite que l'identifiant n'est pas nul
         */
        Number id = documentContext.read("$.id");
        assertThat(id).isEqualTo(99);
    }

}

这是我运行测试类时得到的结果
预期值:200 OK,但是:406 NOT_ACCEPTABLE org.opentest4j.AssertionFailedError:预期值:200 OK,但实际值:406 NOT_ACCEPTABLE...

lvjbypge

lvjbypge1#

开始购买更改调用中的响应类:

ResponseEntity< CashCard > response = restTemplate.getForEntity("/cashcards/99", CashCard.class);

相关问题