可以单元测试我的包没有导入特定的包吗?

Ale*_*nok 0 unit-testing go

我想确保我的Go包使用"dal"包提供的var实例,并且不会意外地直接导入和使用db访问包.

我想我可以在源代码上进行regexp搜索,但我想知道是否有办法通过标准的Go测试确保规则?

只是想知道我要做什么:

接口包:

package dal

type UserDal interface {
  GetUser(id int) User
}
Run Code Online (Sandbox Code Playgroud)

实施包:

package dal_db_specific

import (
  "some_db"
  "dal"
)

type UserDalDbSpecific struct {
}

func (_ UserDalDbSpecific) GetUser(id int) User {
  some_db.executeQuery(...)
  ...
  return user
}

register_dal() {
  dal.UserDal = UserDalDbSpecific{}
}
Run Code Online (Sandbox Code Playgroud)

用户代码包:

import (
  "dal"
  "some_db" <-- Fail here!
)

func someFunc() {
  user := dal.User.GetUser(1) // Right way
  some_db.DoSomething()  <-- Fail here!
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*ner 5

比grep稍微可靠:使用标准parser解析目标源并检查AST.您正在寻找ImportSpec与数据库访问包匹配的节点.如果找到任何测试,则测试失败.