You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Cloud Spanner集成测试:能否搭建无需谷歌凭据的嵌入式内存数据库?

关于Google Cloud Spanner集成测试的两个问题解答

一、集成Spanner测试时能否启动H2、Embedded CassandraUnit这类内存数据库?

完全可以!这些内存数据库和Google Cloud Spanner的客户端/驱动是相互独立的,不会产生任何冲突。你只需要在测试代码中为不同的数据库配置各自的连接逻辑即可:

  • 比如Spanner用官方提供的客户端库,H2用JDBC连接字符串,Embedded CassandraUnit用它专属的嵌入式初始化API。
  • 举个简单的场景:如果你的服务同时依赖Spanner和H2,测试时可以分别初始化两个数据源,针对不同的DAO层执行测试用例,两者互不干扰。

二、无需谷歌凭据JSON、无需远程Spanner的嵌入式解决方案:Spanner Emulator

Google官方提供了Spanner Emulator,这是一个本地运行的模拟服务,完全满足你“无需真实凭据、无需连接远程Spanner”的需求,而且它是免费的,所有操作都在本地完成。下面是具体的设置和测试指导:

1. 安装Spanner Emulator

有两种常用方式:

  • 通过gcloud CLI安装:先确保你已经安装了gcloud工具,然后执行命令:
    gcloud components install cloud-spanner-emulator
    
    安装完成后启动模拟器:
    gcloud emulators spanner start
    
  • 使用Docker:拉取官方镜像并启动容器(无需安装gcloud):
    docker pull gcr.io/cloud-spanner-emulator/emulator
    docker run -p 9010:9010 -p 9020:9020 gcr.io/cloud-spanner-emulator/emulator
    

2. 配置客户端连接模拟器

核心是让Spanner客户端指向本地模拟器,而不是真实的Google Cloud服务。这里给两个主流语言的示例:

Java示例

你可以直接在代码中配置模拟器地址,或者通过环境变量自动适配:

import com.google.cloud.spanner.Spanner;
import com.google.cloud.spanner.SpannerOptions;

public class SpannerEmulatorTest {
    public static void main(String[] args) {
        // 直接在代码中指定模拟器地址
        SpannerOptions options = SpannerOptions.newBuilder()
                .setEmulatorHost("localhost:9010")
                .build();
        
        try (Spanner spanner = options.getService()) {
            // 初始化测试用的实例和数据库
            // 执行你的测试逻辑,比如创建表、插入数据、查询等
            System.out.println("成功连接到Spanner模拟器");
        }
    }
}

或者设置环境变量SPANNER_EMULATOR_HOST=localhost:9010,这样客户端会自动识别,无需在代码中硬编码。

Python示例

同样可以通过环境变量指定模拟器地址:

import os
from google.cloud import spanner

# 设置环境变量指向模拟器
os.environ["SPANNER_EMULATOR_HOST"] = "localhost:9010"

# 初始化客户端、实例和数据库
client = spanner.Client()
instance = client.instance("test-instance")
database = instance.database("test-db")

# 执行测试操作
with database.batch_update() as batch:
    batch.execute_update("CREATE TABLE Users (id INT64 PRIMARY KEY, name STRING(100))")

3. 测试注意事项

  • 模拟器支持Spanner的大部分核心功能,但部分高级特性(比如跨区域复制、备份恢复)可能不支持,测试前建议先确认你的用例是否涉及这些特性。
  • 每次启动模拟器都是全新的空白状态,测试前需要在初始化阶段自动创建实例和数据库(可以写在测试的setup方法里)。
  • 模拟器完全本地运行,不需要任何Google Cloud账号或凭据,也不会产生任何云服务费用。

内容的提问来源于stack exchange,提问作者Test

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:58:00