Go 中的猴子修补:测试遗留代码的解决方案
虽然 Go 对接口的依赖使模拟变得简单,但可能会出现您需要的情况测试代码而不改变它。如果代码的结构不适合使用接口并且高度互连,那么传统的模拟技术可能会具有挑战性。
幸运的是,Go 确实为这个问题提供了解决方案:猴子补丁。该技术允许您在运行时修改对象。要实现它,请创建一个接口来包装要模拟的原始结构:
type MyInterface interface { DoSomething(i int) error DoSomethingElse() ([]int, error) }
接下来,将原始结构嵌入到具体结构中,并在具体结构中实现接口的方法:
type Concrete struct { *somepackage.Client } func (c *Concrete) DoSomething(i int) error { return c.client.DoSomething(i) } func (c *Concrete) DoSomethingElse() ([]int, error) { return c.client.DoSomethingElse() }
此修改后的代码允许您以与模拟 Client 类型相同的方式模拟 Concrete 类型,从而提供了一种测试代码的解决方案,而无需更改原始代码库。
以上是Go 中的 Monkey 补丁如何解决遗留代码测试挑战?的详细内容。更多信息请关注PHP中文网其他相关文章!