是否可以对我的包不导入特定包进行单元测试?

时间:2017-04-11 11:26:08

标签: unit-testing go

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

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

只是想知道我将要做什么:

接口包:

package dal

type UserDal interface {
  GetUser(id int) User
}

实施包:

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{}
}

用户代码包:

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

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

1 个答案:

答案 0 :(得分:5)

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