我有一个有趣的小天气应用程序。只需 99 美元/天,该应用程序就会每天检查天气,如果西雅图下雨,就给圣地亚哥的人们送一把雨伞。
我将这两个函数用作我的应用程序的一部分:
func IsRaining() (bool, error) {
resp, err := http.Get("https://isitraining.in/Seattle")
if err != nil {
return false, fmt.Errorf("could not fetch raining status: %w", err)
}
parsed, err := weather.Parse(resp)
if err != nil {
return false, fmt.Errorf("could not parse the weather: %w", err)
}
return parsed.IsRaining, nil
}
func SendUmbrella() error {
postData := umbrellaPostData()
resp, err := http.Post("https://amazon.com", "text/html", &postData)
if err != nil {
return fmt.Errorf("could not send umbrella: %w", err)
}
return nil
}
我想测试IsRaining()
and SendUmbrella()
,但我不想每次运行测试时都给别人送伞;我的工程师使用 TDD,我确实有预算,你知道的。同理IsRaining()
,万一断网了怎么办?我仍然需要能够通过测试运行,风雨无阻。
我想以这样一种方式来做到这一点,即代码保持符合人体工程学和可读性,但我绝对需要能够测试那些依赖于 HTTP 的函数。在 Go 中最惯用的方法是什么?
PS我正在使用Testify。在评论中告诉我所有关于我如何失去对惯用 Go 的任何希望 :)