【问题标题】:how to write Test case for if else using mockMvc in spring boot如何在spring boot中使用mockMvc为if else编写测试用例
【发布时间】:2021-03-29 16:21:29
【问题描述】:

如何为以下代码编写 Mockmvc 测试用例:

我的控制器类

@RestController

公共类 CartController {

@Autowired
private CartService cartService;

@GetMapping(path = "/addToCart", produces = MediaType.APPLICATION_JSON_VALUE)
public String cart(@Valid @RequestBody Cart cart) {
    return cartService.cart(cart);
}

}

我的 CartService 类:

@服务

公共类 CartService {

private LoginRepository loginRepository;
@Autowired
private ProductRepository productRepository;
@Autowired
private CartRepository cartRepository;

@Autowired
private EmailService emailService;

public CartService(LoginRepository loginRepository) {
    this.loginRepository = loginRepository;
}

public String cart(Cart cart) {
    String username = cart.getUserName();
    System.out.println(username);
    String password = cart.getPassword();
    String email = cart.getEmail();

    if (loginRepository.existsByUserNameAndPassword(username, password)) {

        String productname = cart.getProductName();
        System.out.println(productname);
        String price = cart.getPrice();
        String discription = cart.getDiscription();

        if (productname != null) {

            if (productRepository.existsByProductNameAndPriceAndDiscription(productname, price, discription)) {
                Integer count = cartRepository.countByUserName(username);
                System.out.println(count);


                cartRepository.save(new Cart(username, password, email, productname, price, discription, count));
                return "{\"message\":\"product Successfully added to cart\"}";
            } else {
                throw new ResponseStatusException(
                        HttpStatus.NOT_FOUND, "entity not found"
                );
            }
        } else {

            throw new ResponseStatusException(HttpStatus.BAD_REQUEST);
        }
    } else {

        throw new ResponseStatusException(HttpStatus.NOT_FOUND);
    }
}

我不知道如何使用 mockmvc 为上述代码编写测试用例。我不知道如何为 if else 语句编写 mockmvc 测试用例。所以请帮助我如何为整个代码编写 mockmvc 测试用例,以便我也可以对 if else 语句进行 mockmvc 测试。

【问题讨论】:

    标签: spring-boot junit mockmvc


    【解决方案1】:

    我认为您对 @WebMvcTest 的用途有误解。 它用于集成测试您的应用程序的单个切片 - 即 Web MVC。 这意味着您的 @WebMvcTest 注释测试应该只使用您的服务的模拟,因为他们应该测试所有与 Web 相关的东西(正确转换为 JSON、XML;返回正确的响应代码等)

    tutorial on spring.io 应该可以回答您的问题。


    为了测试您的服务,您可以使用 plain old Unit Test,例如 JUnit。 为了使它起作用,您需要对您的课程进行一些返工。我建议的第一件事是用构造函数注入替换字段注入。这是推荐的注射方式。 Read here 了解更多信息。

    在此更改之后,您可以模拟服务的依赖项(例如使用 Mockito)并通过构造函数传递它们。 这样您就可以在代码中测试不同的 if/else 分支。


    最后但并非最不重要的一点是,我强烈建议对您的服务进行一些其他返工。目前,它返回与 Web 上下文高度耦合的信息(手工制作的 JSON,ResponseStatusException)。处理这些是您的控制器的责任。 你的服务应该独立于使用它的东西(你的情况下的控制器)。想象一下你的服务将被另一个类用于 CLI 工具,它对 JSON 和响应状态一无所知.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-26
      • 2021-11-12
      • 1970-01-01
      • 2015-01-01
      • 2021-08-13
      • 2022-01-19
      • 1970-01-01
      • 2023-02-01
      相关资源
      最近更新 更多