项目作者: romnn

项目描述 :
pre-configured testcontainers for your golang integration tests.
高级语言: Go
项目地址: git://github.com/romnn/testcontainers.git
创建时间: 2020-04-24T18:00:02Z
项目社区:https://github.com/romnn/testcontainers

开源协议:MIT License

下载


testcontainers, pre-configured

GitHub
GoDoc
Test Coverage

A collection of pre-configured testcontainers for your golang integration tests.

Available containers (feel free to contribute):

Usage

Redis
  1. // examples/redis/redis.go
  2. package main
  3. import (
  4. "context"
  5. "log"
  6. "github.com/go-redis/redis"
  7. tc "github.com/romnn/testcontainers"
  8. tcredis "github.com/romnn/testcontainers/redis"
  9. )
  10. func main() {
  11. container, err := tcredis.Start(context.Background(), tcredis.Options{
  12. ImageTag: "7.0.5", // you could use latest here
  13. })
  14. if err != nil {
  15. log.Fatalf("failed to start container: %v", err)
  16. }
  17. defer container.Terminate(context.Background())
  18. // start logger
  19. logger, err := tc.StartLogger(context.Background(), container.Container)
  20. if err != nil {
  21. log.Printf("failed to start logger: %v", err)
  22. } else {
  23. defer logger.Stop()
  24. go logger.LogToStdout()
  25. }
  26. // connect to redis
  27. db := redis.NewClient(&redis.Options{
  28. Addr: container.ConnectionURI(),
  29. Password: container.Password,
  30. DB: 1,
  31. })
  32. // set some data
  33. db.HSet("my-hash-key", "key", "Hello World!")
  34. // get the data back
  35. value, err := db.HGet("my-hash-key", "key").Result()
  36. if err != nil {
  37. log.Fatalf("failed to get value: %v", err)
  38. }
  39. if value != "Hello World!" {
  40. log.Fatalf(`received %q instead of "Hello World!"`, value)
  41. }
  42. log.Printf("received %q from redis", value)
  43. }
MongoDB
  1. // examples/mongo/mongo.go
  2. package main
  3. import (
  4. "context"
  5. "log"
  6. "time"
  7. tcmongo "github.com/romnn/testcontainers/mongo"
  8. "go.mongodb.org/mongo-driver/bson"
  9. "go.mongodb.org/mongo-driver/mongo"
  10. "go.mongodb.org/mongo-driver/mongo/options"
  11. )
  12. func main() {
  13. container, err := tcmongo.Start(context.Background(), tcmongo.Options{
  14. ImageTag: "6.0.2", // you could use latest here
  15. })
  16. if err != nil {
  17. log.Fatalf("failed to start container: %v", err)
  18. }
  19. defer container.Terminate(context.Background())
  20. // connect to the container
  21. uri := container.ConnectionURI()
  22. client, err := mongo.NewClient(options.Client().ApplyURI(uri))
  23. if err != nil {
  24. log.Fatalf("failed to create client: %v", err)
  25. }
  26. ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
  27. defer cancel()
  28. client.Connect(ctx)
  29. // count documents in collection
  30. collection := client.Database("testdatabase").Collection("my-collection")
  31. opts := options.Count().SetMaxTime(2 * time.Second)
  32. count, err := collection.CountDocuments(
  33. context.TODO(),
  34. bson.D{},
  35. opts,
  36. )
  37. if err != nil {
  38. log.Fatalf("failed to count docs in collection %q: %v", collection.Name(), err)
  39. }
  40. log.Printf("collection %q contains %d documents", collection.Name(), count)
  41. }

For more examples, see examples/.