繁体   English   中英

Spring Boot 应用程序的单元测试用例

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM