unit-testing - os.FileInfo 模拟不匹配

标签 unit-testing go interface mocking typing

在我的一个 golang 项目中,我为测试用例模拟了 os.FileInfo

我不确定我是否正确理解了golang的接口(interface)处理。 据我所知,以下代码应该可以工作,但我收到一个编译器错误,指出接口(interface)不匹配。

我修改了this go-doc 示例,以防您想自己测试一下。

package main

import (
    "fmt"
    "io/ioutil"
    "log"
)

type file interface{
    Name() string
} 

func readFiles() []file{
    files, err := ioutil.ReadDir(".")

    if err != nil {
        log.Fatal(err)
    }

    return files
}

func main() {
    files := readFiles()

    for _, file := range files {
        fmt.Println(file.Name())
    }
}

在 golang 文档之后,ioutil.ReadDir(".") 应该返回一段 os.FileInfo 这应该是我自己编写的 文件接口(interface)。

谁能帮我走出这 hell 般的误会和纠结,好吗?

非常感谢你们!

最佳答案

os.FileInfo 是接口(interface),可以转换成file。但是您尝试将 []os.FileInfo 转换为 []file。 Slice 不是接口(interface),不能断言。

关于unit-testing - os.FileInfo 模拟不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43769695/

相关文章:

rest - 如何销毁 MockRestServiceServer?

go - slice slice 的拆包

c# - 接口(interface)事件的实际使用

java - 适用于 HTTP 和数据库的 DAO 模式

swift - 如何为了测试而覆盖 Observable<T>?

silverlight - Silverlight 5 的最佳模拟框架

java - Maven Surefire 适当使用Exclude

go - 可汗学院重定向默认 URL Golang

go - 无限期地运行 Go 例程

php - OAuth 2.0 服务器 PHP,找不到接口(interface)