在我想測試的包中,我有一個init函數,用於加載配置文件,其中包含一些我想用來運行我的應用程序的東西。但是,我不想在運行單元測試時觸發這個init函數。初始化函數中斷單元測試
有沒有什麼辦法可以在單元測試中跳過或防止這個init函數被調用?
一些片段來說明這個問題:
func init() {
var err error // Necessary to prevent config variable shadowing
config, err = loadConfig("./client/config.yml")
if err != nil {
log.Fatal(err)
}
}
func loadConfig(filepath string) (*Config, error) {
viper.SetConfigFile(filepath)
if err := viper.ReadInConfig(); err != nil {
return nil, fmt.Errorf("Error loading config file: %s", err)
}
(...)
}
// New returns a Config value(!)
func New() Config {
return *config
}
測試用例:
func TestNew(t *testing.T) {
expected := &Config{}
observed := New()
if !reflect.DeepEqual(observed, expected) {
t.Errorf("observed %+v. expecting %+v\n", observed, expected)
}
}
我會強烈建議不要在加載配置init()函數,出於所述的原因(測試問題)等(結構,可重用性,控制等)。只需從入口點調用loadConfig()即可。 – Adrian