小编cej*_*ast的帖子

为什么需要使用coalesce折叠/展开条件插入?

我试图理解条件插入的这种模式是如何工作的:

g.V()
  .hasLabel('person').has('name', 'John')
  .fold()
  .coalesce(
    __.unfold(),
    g.addV('person').property('name', 'John')
  ).next();
Run Code Online (Sandbox Code Playgroud)

折叠/展开的目的是什么?为什么这些是必要的,为什么这不起作用:

g.V()
  .coalesce(
    __.hasLabel('person').has('name', 'John'),
    g.addV('person').property('name', 'John')
  ).next();
Run Code Online (Sandbox Code Playgroud)

折叠然后展开的模式对我来说似乎是多余的,但上述情况并没有产生相同的结果.

gremlin tinkerpop3

9
推荐指数
1
解决办法
1413
查看次数

在 Golang 中测试/模拟 3rd 方包

我是 Golang 的新手,在学习这门语言时一直采用 TDD 方法。我一直相处得很好,但我发现测试第三方软件包非常笨拙,这让我相信我一直在采取错误的方法。

我遇到问题的具体情况是模拟Redis 客户端以进行错误处理。我采用的方法是创建我自己的接口,并且实现包装了我想要使用的客户端方法。

type Redis interface {
    Get(key string) (string, error)
}

type RedisClient struct {
    client *redis.Client
}

func (redisClient *RedisClient) New(client *redis.Client) *RedisClient {
    redisClient.client = client

    return redisClient
}

func (redisClient *RedisClient) Get(key string) (string, error) {
    return redisClient.client.Get(key).Result()
}
Run Code Online (Sandbox Code Playgroud)

然后我可以创建一个实现相同接口的模拟来返回我指定的任何值,特别是用于测试错误处理。

我遇到了一个障碍,即客户端执行交易的特定方法(MULTI) 返回属于该包的另一个接口。在这种情况下我会怎么做?自己实现该接口似乎是不可能的。

类似地,随着这个客户端使用量的增长,我自己的实现可以增长到它实现整个 Redis 接口的程度——这似乎与将其委托给外部依赖的整个想法背道而驰。

有没有更好的方法来测试这样的第三方包,比如错误处理?

testing tdd go

4
推荐指数
1
解决办法
3097
查看次数

标签 统计

go ×1

gremlin ×1

tdd ×1

testing ×1

tinkerpop3 ×1