登录
首页 >  Golang >  Go问答

在微服务架构中,如何进行依赖于其他服务的服务的集成测试?

来源:stackoverflow

时间:2024-02-24 23:45:28 384浏览 收藏

小伙伴们有没有觉得学习Golang很有意思?有意思就对了!今天就给大家带来《在微服务架构中,如何进行依赖于其他服务的服务的集成测试?》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!

问题内容

我正在构建一个微服务应用程序,目前正在编写一些测试。我正在测试的函数位于 cart 服务所拥有的下方,并尝试获取所有购物车项目并将项目详细信息附加到 catalog 服务中的每个项目的其他详细信息。

func (s *Server) Grpc_GetCartItems(ctx context.Context, in *pb.GetCartItemsRequest) (*pb.ItemsResponse, error) {
    // Get product ids and its quantity in cart by userId
    res, err := s.Repo.GetCartItems(ctx, in.UserId)
    if err != nil {
        return nil, err
    }

    // Return empty response if there is no items in cart
    if len(res) == 0 {
        return &pb.ItemsResponse{}, nil
    }

    // Get Product ID Keys from map
    ids := GetMapKeys(res)

    // RPC call catalog server to get cart products' names
    products, err := s.CatalogClient.Grpc_GetProductsByIds(ctx, &catalogpb.GetProductsByIdsRequest{ProductIds: ids})
    if err != nil{
        return nil, err
    }

    // Return response in format product id, product name, and qty in cart
    items, err := AppendItemToResponse(products, res)
    if err != nil{
        return nil, err
    }

    return items, nil
}

问题在于测试设置,我需要将一些测试数据种子到 cartcatalog 存储库。我可以使用 cart 存储库来做到这一点,但是对于 catalog 来说,通常的做法是模拟依赖项 s.catalogclient.grpc_getproductsbyids 吗?我对测试还是新手,据我了解,您通常不会在集成测试中进行模拟,但我不确定是否有更好的方法来解决此类问题。


正确答案


对于集成测试,您不会模拟服务,这是正确的。

通常,如果这是您无法控制的服务,您会对该服务进行存根。

可以针对登台或测试服务(以 E2E 能力)或在虚拟环境(如 compose、K8S 等)中运行集成测试。

我认为根据您的要求,我会使用 docker-compose 或类似的东西来暂存它。如果您打算将来进行 E2E 设置,您可能需要考虑拥有一个测试环境。

请参阅:https://www.testenvironmentmanagement.com/types-of-testing-environments/

强制性“您不应直接从另一个微服务调用一个微服务”评论。虽然您可以找到一种方法来进行测试,但您已经紧密耦合了架构。这个(测试)问题只是第一个问题,因为您的 cart 服务直接与您的 catalog 服务相关联,所以接下来会出现很多问题。如果您修复了 close-coupled architecture 问题,您的测试问题也将得到解决。

理论要掌握,实操不能落!以上关于《在微服务架构中,如何进行依赖于其他服务的服务的集成测试?》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>