软件包“ gopkg.in/redis.v3”包含一些代码
type Client struct {
}
func (*client) Eval (string, []string, []string) *Cmd {
}
type Cmd struct {
}
func (*Cmd) Result () (interface{}, error) {
}
哪个以以下方式成功工作
func myFunc (cli *redis.Client) {
result, err := cli.Eval('my script').Result()
}
问题在于,有时Redis集群会受到重击,有片刻,结果返回的接口为nil。
这是相当容易处理的,但是我希望进行测试以确保它被实际处理并且不会发生类型断言恐慌。
传统上,我会将模拟Redis客户端插入myFunc中,该客户端最终会返回nil。
type redisClient interface {
Eval(string, []string, []string) redisCmd
}
type redisCmd interface {
Result() (interface{}, error)
}
func myFunc (cli redisClient) {
result, err := cli.Eval('my script').Result()
}
我面临的问题是编译器无法识别redis.Client满足接口redisClient,因为它无法识别从Eval返回的redis.Cmd满足redisCmd。
> cannot use client (type *redis.Client) as type redisClient in argument to myFunc:
> *redis.Client does not implement redisClient (wrong type for Eval method)
> have Eval(sting, []string, []string) *redis.Cmd
> want Eval(sting, []string, []string) redisCmd
问题是您的界面与redis客户端不匹配。如果将接口更改为:
type redisClient interface {
Eval(string, []string, []string) *redis.Cmd
}
它将编译。话虽如此,看起来您确实想要rediscmd
,所以您将需要对redis客户端进行包装:
type wrapper struct{
c *redis.Client
}
func (w wrapper) Eval(x sting, y []string, z []string) redisCmd {
return w.c.Eval(x,y,z) // This assumes that *redis.Cmd implements rediscmd
}
我还尝试将模拟转换为文档,如下所示 但这会在代码实现内部访问MongoCollection时产生NullpointerException异常。 这两个我都试过了 null 我厌倦了用java编写相同的测试,并在其中进行泛型的转换。 有人在Kotlin有嘲弄泛型类的经验吗?
问题内容: 我正在将Golang Revel用于某些Web项目,到目前为止,我确实喜欢12个项目。由于返回类型,在所有这些代码中我都有很多代码冗余。看一下这两个功能: 如您所见,它们都返回相同类型的数据(类型struct)。我的想法只是像这样传递字符串var: 像这样,我只能使用一个助手来返回数据类型,而不是一遍又一遍地对不同的模型但相同的数据类型执行同一操作。 我的问题是: 这有可能吗 如果是,
我在写一个注释处理器,我有一个带有@Inherited的注释“a”。这意味着对于任何表示类“c”的元素“e”,它扩展了我的注释实际存在的类,我将得到为真——好吧,这是期望值。 我还能够通过以下方式确定我的注释实际存在的层次结构中的最高级别: 但是我不能得到的功能,以确定是否在一个给定的元素,我实际上声明注释或没有,这将与层次结构中的一个以上的类有注释存在(这显然是可能的java反射和名义getDe
我有一个scala类a,其中有一个方法。 还有一个B类
我有一个在 ABC 中自动连线的 XYZ 类,在类 MyClass 中我有一个方法名称 doSomething() 在该方法中我做 ABC abc = 新的 ABC();然后我调用 abc.someMethod(); 请参见下面的代码示例: ABC类 类MyCLass 需要单元测试doSomething(),但我NPE在ABC中XYZ为空。在这种情况下,我怎么能模仿@Autowire。
问题内容: 有很多解决方案可以找出应用在哪个设备上运行。 但是在模拟器中运行,我们只能检测到它是模拟器,而不是哪种类型的模拟器(iphone5、6、6s等)。 我们如何使用模拟器根据设备类型测试不同的逻辑?或者如何检测代码中模拟的设备? 问题答案: 根据我在我为您编写了这个小的Swift函数: 我得到的结果是“ iPhone8,2”,它转换为iPhone 6+,这是我的模拟器设置的。 而且,如果您