testing - 转到类型错误 : struct does not implement interface

标签 testing go mocking

这个问题在这里已经有了答案:





Struct does not implement interface if it has a function which parameter implement interface

(2 个回答)


2年前关闭。



// BEGIN: external library

type realX struct {}

type realY struct {}

func (realX) Do() realY {
  return realY{}
}

// END

type A struct {
  a myX
}

type myY interface {}

type myX interface {
  Do() myY
}

func foo (arg1 myY) {
}

func main() {
    foo(realY{})
    x := A{realX{}}
    fmt.Println("Hello, playground")
}

我得到:
cannot use realX literal (type realX) as type myX in field value:
    realX does not implement myX (wrong type for Do method)
        have Do() realY
        want Do() myY

从它的外观来看,realY 实现了 myY,那为什么我不能这样做呢?这使得不可能干净地编写模拟单元测试。

最佳答案

不,它没有实现 myY ,正如错误明确指出的那样:

realX does not implement myX (wrong type for Do method)
    have Do() realY
    want Do() myY

方法签名必须与实现接口(interface)的类型完全匹配。方法签名不匹配 - 返回类型不同。没关系realY工具myY ;签名不一样。

关于testing - 转到类型错误 : struct does not implement interface,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48193800/

相关文章:

android - 无法在我的手机上测试应用程序 : Failure [INSTALL_FAILED_OLDER_SDK]

go - 为什么下面的 Golang 代码没有运行?

go - 树递归 - 如何避免 'missing return at end of function' ?

java - 如何用单例测试代码?

c++ - 为什么GMock无法识别mock类中虚方法的实现?

unit-testing - 如何防止 Clojure 测试之间的符号污染?

testing - 什么时候应该使用 Debug.Assert()?

javascript - 如何在超测失败时打印请求日志(如请求 url、请求正文、请求 queryParam)?

go - 从 golang 连接到 kubernetes-aerospike 网格集群

c# - 使用适配器模式包装系统对象(文件、服务 Controller 等)与绕行进行单元测试相比有什么优势?