如何在微服务环境中对依赖于另一个服务的服务进行集成测试



我正在构建一个微服务应用程序,目前正在编写一些测试。下面是我正在测试的函数,它由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存储库中。我可以用cartrepo很好地做到这一点,但对于catalog来说,只模拟依赖关系s.CatalogClient.Grpc_GetProductsByIds是一种常见的做法吗?我对测试还是个新手,据我所知,你通常不会在集成测试中嘲笑我,但我不确定是否有更好的方法来解决这类问题。

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

通常,如果它是一个您无法控制的服务,您会截断该服务。

集成测试可以针对分段或测试服务(在E2E容量中(或在虚拟环境(如compose、K8S等(中运行

我想对于你的要求,我会用docker compose或类似的东西来展示它。如果你打算在未来进行E2E设置,你可能需要考虑一个测试环境。

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

强制性"你不应该直接从另一个微服务中调用一个"微服务";议论虽然您可以找到一种使测试工作的方法,但您已经将体系结构紧密耦合在一起了。由于cart服务与catalog服务直接相关,因此这种(测试(问题只是众多问题中的第一个。如果您修复了紧密耦合的体系结构问题,那么您的测试问题也将得到解决。

最新更新