Spring boot 当原始代码运行良好时,为什么我的单元测试没有通过?

Spring boot 当原始代码运行良好时,为什么我的单元测试没有通过?,spring-boot,unit-testing,mockito,repository,junit5,Spring Boot,Unit Testing,Mockito,Repository,Junit5,我的单元测试一直在发送错误消息,即使最初的代码可以工作,我也以同样的方式编写了其他单元测试,它们工作得非常好 初始代码: @Override public void newOrder(OrderVO orderVO) { OrderProduct orderProduct = new OrderProduct(); Optional<User> userResponse = userRepository.findById(orderVO.g

我的单元测试一直在发送错误消息,即使最初的代码可以工作,我也以同样的方式编写了其他单元测试,它们工作得非常好

初始代码:

@Override
    public void newOrder(OrderVO orderVO) {

        OrderProduct orderProduct = new OrderProduct();

        Optional<User> userResponse = userRepository.findById(orderVO.getUserId());
        User user = userResponse.orElse(new User());
        Orders order = new Orders(user);
        orderRepository.save(order);

        orderProduct.setId(new OrderProductId());
        orderProduct.setOrders(order);

        List<ProductVO> productVOS = orderVO.getOrderProducts();
        for (ProductVO p : productVOS) {

            Optional<Product> productResponse = productRepository.findById(p.getId());
            Product product = productResponse.orElse(new Product());
            product.setAmount(product.getAmount() - p.getAmountOfOrderedProducts());
            product.setUser(user);
            productRepository.save(product);

            orderProduct.setProduct(product);
            orderProduct.setAmountOfOrderedProduct(p.getAmountOfOrderedProducts());
            orderProductRepository.saveOrder(orderProduct.getProduct().getId(), orderProduct.getOrders().getId(), orderProduct.getAmountOfOrderedProduct());
        }
    }
第二个指向
verify(orderRepository,times(1))。保存(orders)
错误消息是

Argument(s) are different! Wanted:
orderRepository.save(
    com.carlsberg.orderservice.domains.Orders@d7c7950f
);
差异似乎存在于
d7c7950f
部分


这是我第一次尝试进行单元测试。我真的不知道为什么会出现这样的错误,因为编写单元测试的相同概念在其他方法上运行得很好。

第一个错误是因为您的测试从未覆盖在tested
OrderVO
中存在
ProductVo
的情况。这使得stubing方法是“错误的”,因为该方法仅在通过
ProductVO
s的循环中调用

如果有帮助,尝试添加一些
ProductVO
s。在0情况下,您可能仍然希望使用0 1和许多
OrderVOs
进行测试,只需删除存根即可,因为它不是必需的

第二个更复杂,在touyr服务中,您有:

Orders order = new Orders(user);
orderRepository.save(order);
Orders orders = new Orders(userTest);
另一方面,在您的测试中,您有:

Orders order = new Orders(user);
orderRepository.save(order);
Orders orders = new Orders(userTest);
没有保存您在测试中创建的订单的路径,它总是在服务中创建的,因此HASH也不同。我猜当您将verify更改为,例如:

verify(orderRepository, times(1)).save(any());

但是测试很糟糕,您应该使用在测试中创建的命令来修复它。

这很有帮助。谢谢你的努力。