java.lang.AssertionError:预期状态:<200>,但状态为:<404>,且测试用例失败

时间:2020-05-18 04:40:11

标签: java spring hibernate spring-boot spring-mvc

我编写了以下代码,并且必须通过测试用例……iam抛出java.lang.AssertionError: Status expected:<200> but was:<404>错误,请帮忙

控制器,这是控制器类

package com.example.project;
import com.example.project.HospitalService;
import com.example.project.Hospital;
import java.util.List;
import java.lang.*;
import org.springframework.http.ResponseEntity;
import java.util.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
//import org.springframework.web.bind.annotation.PostMapping;
//import org.springframework.web.bind.annotation.DeleteMapping;
//import org.springframework.web.bind.annotation.PutMapping;
//import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@RestController
@RequestMapping("/test/")
public class HospitalController {

    @Autowired
    private HospitalService hospitalService;


@RequestMapping(value = "hospitals/{id}", method = RequestMethod.GET)
public @ResponseBody Hospital getHospital(@PathVariable("id") int id) throws Exception {
        Hospital hospital = this.hospitalService.getHospital(id);
        return hospital;
    }

@RequestMapping(value = "hospitals/", method = RequestMethod.GET)
public @ResponseBody List<Hospital> getAllHospitals() throws Exception {
        return this.hospitalService.getAllHospitals();
    }


//@PostMapping("addHospital")
@RequestMapping(value = "hospitals/", method = RequestMethod.POST)
public ResponseEntity<String> addHospital(@RequestBody Hospital hospital  ) {


    return hospitalService.addHospital(hospital);
}

//@PutMapping("updateHospital")
@RequestMapping(value = "hospitals/", method = RequestMethod.PUT)
public ResponseEntity<String> updateHospital(@RequestBody Hospital hospital) {

return hospitalService.updateHospital(hospital);
}

//@DeleteMapping("deleteHospital")
@RequestMapping(value = "hospitals/", method = RequestMethod.DELETE)
public ResponseEntity<String> deleteHospital(@RequestBody Hospital hospital) {

 return hospitalService.deleteHospital(hospital);
}

}

服务:以下是服务类别

package com.example.project;
import  com.example.project.Hospital;
import org.springframework.http.ResponseEntity;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.*;
import java.lang.*;
import java.util.List;
import  com.example.project.HospitalRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
//import org.springframework.http.HttpStatus;
import org.springframework.http.HttpStatus;




@Service
public class HospitalService extends Exception{

    @Autowired
    private HospitalRepository hospitalRepository;
    @Autowired
    public HospitalService(HospitalRepository hospitalRepository){
      this.hospitalRepository=hospitalRepository;
    }
public List<Hospital> getAllHospitals(){
List<Hospital> x= (List)hospitalRepository.findAll();
return x;
}

public Hospital getHospital(int id){
  Hospital x= hospitalRepository.findById(id);
    return x;
}

public ResponseEntity<String> addHospital(Hospital hospital){
 try{

  Hospital h =hospitalRepository.save(hospital);

   return new ResponseEntity<>(HttpStatus.OK);
 }
catch(Exception e){

 return new ResponseEntity<>(null,HttpStatus.INTERNAL_SERVER_ERROR);
}

}

public ResponseEntity<String> updateHospital(Hospital hospital){
 try{
  Hospital h = (hospitalRepository.save(hospital));

   return new ResponseEntity<>(HttpStatus.OK);
 }
catch(Exception e){

return new ResponseEntity<>(null,HttpStatus.INTERNAL_SERVER_ERROR);
}

 }

public ResponseEntity<String> deleteHospital(Hospital hospital) {
  try {
   hospitalRepository.delete(hospital);

   return new ResponseEntity<>(HttpStatus.NO_CONTENT);
  }
  catch(Exception e){

 return new ResponseEntity<>(null,HttpStatus.INTERNAL_SERVER_ERROR);
}
}


}

测试用例以下是上述给定的服务和控制器需要传递的测试类

package com.example.project;

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;

import com.fasterxml.jackson.databind.ObjectMapper;



@SpringBootTest
@RunWith(SpringRunner.class)
public class HospitalControllerTest {


    private MockMvc mockMvc;

    @Autowired
    WebApplicationContext context;



    @Before
    public void setup() {
        //this.mockMvc = MockMvcBuilders.standaloneSetup(new WeatherApiController()).build();
        mockMvc = MockMvcBuilders.webAppContextSetup(context).build();
    }


    @Test
    public void retrievetestok() throws Exception {
        addhospitalok();
         mockMvc.perform(get("/test/hospitals/1000" )).andDo(print())
                    .andExpect(status().isOk())
                    .andExpect(MockMvcResultMatchers.jsonPath("$.id").value(1000))
                    .andExpect(MockMvcResultMatchers.jsonPath("$.name").value("Apollo Hospital"))
                    .andExpect(MockMvcResultMatchers.jsonPath("$.rating").value(3.8))
                    .andExpect(MockMvcResultMatchers.jsonPath("$.city").value("Chennai"));

    }


    @Test
    public void addhospitalok() throws Exception {
        Hospital hosp=new Hospital();
        hosp.setId(1000);
        hosp.setName("Apollo Hospital");
        hosp.setCity("Chennai");
        hosp.setRating(3.8);
        byte[] hospJson = toJson(hosp);
        Hospital hosp1=new Hospital();
        hosp1.setId(1001);
        hosp1.setName("Global Hospital");
        hosp1.setCity("Bangalore");
        hosp1.setRating(3.5);
        byte[] hospJson1 = toJson(hosp1);
         mockMvc.perform(post("/test/hospitals/" )//.andDo(print())
                    .content(hospJson)
                    .contentType(MediaType.APPLICATION_JSON)
                    .accept(MediaType.APPLICATION_JSON))
                    .andExpect(status().isOk());
         mockMvc.perform(post("/test/hospitals/" )//.andDo(print())
                    .content(hospJson1)
                    .contentType(MediaType.APPLICATION_JSON)
                    .accept(MediaType.APPLICATION_JSON))
                    .andExpect(status().isOk());          
    }

    @Test
    public void updatehospitalok() throws Exception {
        Hospital hosp1=new Hospital();
        hosp1.setId(1001);
        hosp1.setName("Global Hospitals");
        hosp1.setCity("Goa");
        hosp1.setRating(3.5);
        byte[] hospJson1 = toJson(hosp1);
         mockMvc.perform(post("/test/hospitals/" )//.andDo(print())
                    .content(hospJson1)
                    .contentType(MediaType.APPLICATION_JSON)
                    .accept(MediaType.APPLICATION_JSON))
                    .andExpect(status().isOk());          

         mockMvc.perform(get("/test/hospitals/1001" )).andDo(print())
         .andExpect(status().isOk())
         .andExpect(MockMvcResultMatchers.jsonPath("$.name").value("Global Hospitals"))
         .andExpect(MockMvcResultMatchers.jsonPath("$.city").value("Goa"));
    }


    @Test
    public void deleteHospitalok() throws Exception {
        Hospital hosp=new Hospital();
        hosp.setId(1000);
        hosp.setName("Apollo Hospital");
        hosp.setCity("Chennai");
        hosp.setRating(3.8);
        byte[] hospJson = toJson(hosp);
        mockMvc.perform(delete("/test/hospitals/" )//.andDo(print())
                .content(hospJson)
                .contentType(MediaType.APPLICATION_JSON)
                .accept(MediaType.APPLICATION_JSON))
                .andExpect(status().isNoContent());

    }

     private byte[] toJson(Object r) throws Exception {
            ObjectMapper map = new ObjectMapper();
            return map.writeValueAsString(r).getBytes();
        }
}

错误引发,这是由ide引发的错误,它不显示任何编译或初始化错误

-------------------------------------------------------------------------------
Test set: com.example.project.HospitalControllerTest
-------------------------------------------------------------------------------
Tests run: 4, Failures: 4, Errors: 0, Skipped: 0, Time elapsed: 10.718 sec <<< FAILURE! - in com.example.project.HospitalControllerTest
addhospitalok(com.example.project.HospitalControllerTest)  Time elapsed: 0.257 sec  <<< FAILURE!
java.lang.AssertionError: Status expected:<200> but was:<404>
    at org.springframework.test.util.AssertionErrors.fail(AssertionErrors.java:54)
    at org.springframework.test.util.AssertionErrors.assertEquals(AssertionErrors.java:81)
    at org.springframework.test.web.servlet.result.StatusResultMatchers$10.match(StatusResultMatchers.java:665)
    at org.springframework.test.web.servlet.MockMvc$1.andExpect(MockMvc.java:171)
    at com.example.project.HospitalControllerTest.addhospitalok(HospitalControllerTest.java:75)

deleteHospitalok(com.example.project.HospitalControllerTest)  Time elapsed: 0.02 sec  <<< FAILURE!
java.lang.AssertionError: Status expected:<204> but was:<404>
    at org.springframework.test.util.AssertionErrors.fail(AssertionErrors.java:54)
    at org.springframework.test.util.AssertionErrors.assertEquals(AssertionErrors.java:81)
    at org.springframework.test.web.servlet.result.StatusResultMatchers$10.match(StatusResultMatchers.java:665)
    at org.springframework.test.web.servlet.MockMvc$1.andExpect(MockMvc.java:171)
    at com.example.project.HospitalControllerTest.deleteHospitalok(HospitalControllerTest.java:116)

对于其他测试也一样,但是为了简短起见,我在这里只提及其中的两个

我不明白我为什么会收到此错误,以及可能是什么原因。我试图删除不必要的导入,但它无济于事。我收到的是404错误而不是200错误,我无法理解可能的原因

1 个答案:

答案 0 :(得分:0)

HospitalController.java
package com.example.project;



import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;




@RestController
@RequestMapping("/test/")
public class HospitalController {

    @Autowired
    private HospitalService hospitalService;

@GetMapping("hospitals/{id}")
public @ResponseBody Hospital getHospital(@PathVariable("id") int id) throws Exception {
 return hospitalService.getHospital(id);


    }

@GetMapping("hospitals/")
public @ResponseBody List<Hospital> getAllHospitals() throws Exception {
return hospitalService.getAllHospitals();

    }


@PostMapping("hospitals/")
public ResponseEntity<String> addHospital(@RequestBody Hospital hospital  ) {
hospitalService.addHospital(hospital);
//URI location=ServletUriComponentsBuilder.fromCurrentRequest().path("/{id}").buildAndExpand(sevedUser.getId()).toUri();
return new ResponseEntity<>(HttpStatus.OK);
}


public ResponseEntity<String> updateHospital(@RequestBody Hospital hospital) {
hospitalService.updateHospital(hospital);

    return ResponseEntity.ok("ok");
}

@DeleteMapping("hospitals/")
public ResponseEntity<String> deleteHospital(@RequestBody Hospital hospital) {
hospitalService.deleteHospital(hospital);
    return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}

}
HospitalService.java
package com.example.project;


import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;



@Service
public class HospitalService {

    @Autowired
    private HospitalRepository hospitalRepository;


public List<Hospital> getAllHospitals(){
    List<Hospital> hos = new ArrayList<Hospital>();
    hospitalRepository.findAll().forEach(hos1 -> hos.add(hos1));
    return hos;
}

public Hospital getHospital(int id){

    return hospitalRepository.findOne(id);
}

public void addHospital(Hospital hospital){
hospitalRepository.save(hospital);
}

public void updateHospital(Hospital hos){
//if(hospitalRepository.findById(hos.getId()).isPresent())
//      {
//  Hospital hospital=hospitalRepository.findById(hos.getId()).get();
//  hospital.setName(hos.getName());
//  hospital.setCity(hos.getCity());
//  hospital.setRating(hos.getRating());
    hospitalRepository.save(hos);

//      }

}

public void deleteHospital(Hospital hospital) {

hospitalRepository.delete(hospital);
}
}
Hospital.java
package com.example.demo.Hospital;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class Hospital {

  @Id
 

      public int getId() {
        return id;
    }
    public Hospital() {
    super();
}
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public Hospital(int id, String name, String city, double rating) {
        super();
        this.id = id;
        this.name = name;
        this.city = city;
        this.rating = rating;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getCity() {
        return city;
    }
    public void setCity(String city) {
        this.city = city;
    }
    public double getRating() {
        return rating;
    }
    public void setRating(double rating) {
        this.rating = rating;
    }
    private int id;
      private String name;
      private String city;
      private double rating;



    }
HospitalRepository.java

package com.example.demo.Hospital;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface HospitalRepository extends JpaRepository<Hospital,Integer>{

}
application.properties
server.port=8080
spring.jpa.show-sql=true
spring.h2.console.enabled=true
spring.datasource.platform=h2
spring.datasource.url=jdbc:h2:mem:testdb

data.sql

insert into hospital values(1,'John','bihar',22);