在 Go 中重新定义常量以进行测试
在 Go 编程领域,常量提供了一种存储固定值的不可变方法。虽然这种刚性确保了稳定性,但在测试过程中,当人们需要灵活地改变这些值时,它会带来挑战。例如,考虑这样一个场景:您有一个访问远程 API 的 HTTP 客户端。出于测试目的,您更愿意使用模拟服务器而不是进行实际的 API 调用。
最简单的方法是将 baseUrl 声明为全局变量并在测试期间修改其值。然而,这有潜在的缺点,因为它引入了影响生产代码的运行时更改的风险。为了保持代码完整性,您可能希望将 baseUrl 定义为生产常量,但保留更改它以进行测试的能力。
解决方案:使用参数重构
解决方案在于稍微重构代码。不要在函数中使用常量,而是引入一个接受所需的 baseUrl 值的参数。这允许原始函数保留其 API,同时为测试提供灵活性。
<code class="go">const baseUrl_ = "http://google.com" func MyFunc() string { // Call other function passing the const value return myFuncImpl(baseUrl_) } func myFuncImpl(baseUrl string) string { // use baseUrl // Same implementation that was in your original MyFunc() function }</code>
这种方法可确保您的库的 API 保持不变。但是,它现在允许您通过使用不同的 baseUrl 值测试 myFuncImpl() 来测试原始 MyFunc() 的功能。 MyFunc() 本身不受影响,因为它始终将常量 baseUrl_ 传递给 myFuncImpl()。
导出或未导出的测试函数
是否导出或取消导出的决定myFuncImpl() 函数取决于测试代码的位置。如果它位于同一个包中,则无论其导出状态如何,都可以直接调用 myFuncImpl() 而不会出现问题。
以上是如何修改Go中的常量以进行有效的测试?的详细内容。更多信息请关注PHP中文网其他相关文章!