模拟dutchcoders / goftp进行单元测试

时间:2020-04-06 12:19:37

标签: unit-testing go ftp mocking

我在代码中使用dutchcoders/goftp,出于单元测试的目的,我需要对其进行模拟。

这个组件没有接口,也没有可用的模拟,所以我尝试创建一些组件:

goftp/ftp.go中,

我添加了界面:

type FTPIface interface {
    Close() error
    Walk(path string, walkFn WalkFunc) (err error)
    Rename(from string, to string) (err error)
    Login(username string, password string) (err error)
}

现在,我可以模拟除Connect()以外的所有其他方法,因为connect没有接收者。

您这样使用:

if client, err = goftp.Connect(Host); err != nil {
        return nil, err
    }

因此,我尝试将其更改为能够模拟它:

func NewMyFTP(ftpIface goftp.FTPIface, host, user, password, name string) (*MyFTP, error) 
{ 
    if Client, err = ftpIface.Connect(Host); err != nil {
        return nil, err
    }
    if err = Client.Login(user, password); err != nil {
        return nil, err
    }
}

并在界面定义中添加了Connect()

Connect(addr string) (*FTP, error)

我可以模拟连接,但是它将返回一个FTP对象,而我将无法模拟Login()

那我该怎么办?

  1. 更改go客户?我不想这样做,因为我已经在所有代码中实现了它。
  2. 实现dev ftp服务器:可能是一个好主意,但我将单元测试和功能测试混合使用,并保持外部依赖性。
  3. 找到我的问题的技术解决方案并进行模拟吗?

0 个答案:

没有答案