[英]unit Test cases for spring boot application
我已经为 1 个单一公共方法编写了 1 个单元测试,并且需要客户控制器的其他方法的帮助,我可以参考并为其他控制器和服务编写这些方法。
客户控制器
@CrossOrigin(origins = "http://localhost:4200")
@RestController
@RequestMapping("/api/v1/")
public class CustomerController {
private static final Logger log = LoggerFactory.getLogger(CustomerController.class);
@Autowired
private CustomerRepository customerRepository;
public List<Customer> getAllcustomers(){
return customerRepository.findAll();
}
**public Customer createcustomer(@RequestBody Customer customer) {
log.info("inside customer add ***********");
return customerRepository.save(customer);
}**
**public ResponseEntity<Customer> getcustomerById(@PathVariable Long id) {
Customer customer = customerRepository.findById(id)
.orElseThrow(() -> new ResourceNotFoundException("customer not exist with id :" + id));
return ResponseEntity.ok(customer);
}**
**public ResponseEntity<Customer> updatecustomer(@PathVariable Long id, @RequestBody Customer customerDetails){
Customer customer = customerRepository.findById(id)
.orElseThrow(() -> new ResourceNotFoundException("customer not exist with id :" + id));
customer.setFullName(customerDetails.getFullName());
customer.setPhoneNumber(customerDetails.getPhoneNumber());
customer.setPhone2(customerDetails.getPhone2());
customer.setDistrict(customerDetails.getDistrict());
Customer updatedcustomer = customerRepository.save(customer);
return ResponseEntity.ok(updatedcustomer);
}**
**public ResponseEntity<Map<String, Boolean>> deletecustomer(@PathVariable Long id){
Customer customer = customerRepository.findById(id)
.orElseThrow(() -> new ResourceNotFoundException("customer not exist with id :" + id));
customerRepository.delete(customer);
Map<String, Boolean> response = new HashMap<>();
response.put("deleted", Boolean.TRUE);
return ResponseEntity.ok(response);
}**
}
以下是我正在使用的客户模型
public class Customer {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String fullName;
private int phoneNumber;
private int phone2;
private String email;
private String district;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getFullName() {
return fullName;
}
public void setFullName(String fullName) {
this.fullName = fullName;
}
public int getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(int phoneNumber) {
this.phoneNumber = phoneNumber;
}
}
客户单元测试。
@ExtendWith(MockitoExtension.class)
public class CustomerControllerTest {
@Mock
CustomerRepository customerRepository;
@InjectMocks
CustomerController customerController;
@Test
public void testGetAllcustomers() {
when(customerRepository.findAll()).thenReturn(getCusts());
List<Customer> res = customerController.getAllcustomers();
assertEquals(res.size(),1);
}
public List<Customer> getCusts(){
List<Customer> custs = new ArrayList<>();
Customer c = new Customer();
c.setFullName("Dinga");
custs.add(c);
return custs;
}
}
像上面的单元测试用例一样,我也需要其他方法。 用粗体标记,我需要单元测试用例。
为了测试一个 REST 控制器,推荐使用 mockMvc。 这就像一个休息客户端,但它实际上并没有启动服务器。 相反,它使用 spring 类以几乎与处理真实 HTTP 请求相同的方式调用您的代码。 MoockMvc 会将您的数据转换为 Json 并检索 Json 结果。 这是官方文档,以及一些有关如何使用它的示例: springdoc 。 使用 ObjectMapper(或使用 ObjectMapper 的 JacksonTester),您可以将响应反序列化为对象。
@WebMvcTest(CustomerController.class)
@ComponentScan("com.your.base.package")
class ControllerTest{
@MockBean
private CustomerRepository customerRepository;
@Autowired
private MockMvc mockMvc;
@Test
void test1(){
when(customerRepository.findAll()).thenReturn(<whatever you want>)
// call mockMvc
this.mockMvc.perform(get("/")).andDo(print())
.andExpect(status().isOk());
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.