当前位置:首页 >> 中药大全 >> golang复刻测试:dockertest testcontainers-go

golang复刻测试:dockertest testcontainers-go

发布时间:2024-01-13

T CHARSET=utf8;" var INSERT_DATA = MLT-INSERT INTO student(sid,sname,age) VALUES(?,?,?);MLT- var QUERY_DATA = MLT-SELECT * FROM student;MLT- db.Query("create database test;") db.Query("use test ;") _, err := db.Exec(CREATE_TABLE) fmt.Println("err") db.Exec(INSERT_DATA, 1, "牛魔王", 30) // 查询信息 rows, err := db.Query(QUERY_DATA) if err != nil { fmt.Println(err) } for rows.Next() { var name string var id int var age int if err := rows.Scan(Coid, Coname, Coage); err != nil { fmt.Println(err) } fmt.Printf("%s is %d", name, age) }}

testcontainers-go

package exp1import ( "context" "fmt" "testing" "time" "github.com/go-Redis/redis/v8" "github.com/google/uuid" "github.com/stretchr/testify/require" "github.com/testcontainers/testcontainers-go" "github.com/testcontainers/testcontainers-go/wait")type redisContainer struct { testcontainers.Container URI string}func setupRedis(ctx context.Context) (*redisContainer, error) { req := testcontainers.ContainerRequest{ Image: "redis:6", ExposedPorts: []string{"6379/tcp"}, WaitingFor: wait.ForLog("* Ready to accept connections"), } container, err := testcontainers.GenericContainer(ctx, testcontainers.GenericContainerRequest{ ContainerRequest: req, Started: true, }) if err != nil { return nil, err } mappedPort, err := container.MappedPort(ctx, "6379") if err != nil { return nil, err } hostIP, err := container.Host(ctx) if err != nil { return nil, err } uri := fmt.Sprintf("redis://%s:%s", hostIP, mappedPort.Port()) return CoredisContainer{Container: container, URI: uri}, nil}func TestIntegrationSetGet(t *testing.T) { if testing.Short() { t.Skip("Skipping integration test") } ctx := context.Background() redisContainer, err := setupRedis(ctx) if err != nil { t.Fatal(err) } t.Cleanup(func() { if err := redisContainer.Terminate(ctx); err != nil { t.Fatalf("failed to terminate container: %s", err) } }) // You will likely want to wrap your Redis package of choice in an // interface to aid in unit testing and limit lock-in throughtout your // codebase but that's out of scope for this example options, err := redis.ParseURL(redisContainer.URI) if err != nil { t.Fatal(err) } client := redis.NewClient(options) defer flushRedis(ctx, *client) t.Log("pinging redis") pong, err := client.Ping(ctx).Result() require.NoError(t, err) t.Log("received response from redis") if pong != "PONG" { t.Fatalf("received unexpected response from redis: %s", pong) } // Set data key := fmt.Sprintf("{user.%s}.foritefood", uuid.NewString()) value := "Cabbage Biscuits" ttl, _ := time.ParseDuration("2h") err = client.Set(ctx, key, value, ttl).Err() if err != nil { t.Fatal(err) } // Get data sedValue, err := client.Get(ctx, key).Result() if err != nil { t.Fatal(err) } if sedValue != value { t.Fatalf("Expected value %s. Got %s.", sedValue, value) } fmt.Println(key, sedValue)}func flushRedis(ctx context.Context, client redis.Client) error { return client.FlushAll(ctx).Err()}

两个包中的例子都详述了类似于的应用软件的名词,可以参考下

晚上睡觉打呼噜用什么药
南京做试管婴儿多少钱
盐酸坦洛新缓释片能治尿频尿急吗
治疗腹泻的药有哪些
坦洛新片主治什么
标签:
友情链接: