patching em go: uma solução para bases de código imutáveis
trabalhando com bases de código que não são programadas para interfaces e fortemente interconectadas podem apresentar desafios para testar e banchar. Em tais cenários, as técnicas tradicionais de zombaria podem não ser aplicáveis. No entanto, existe uma estratégia no GO que pode ajudar: patching de macacos. Isso permite zombar de métodos específicos nos testes, deixando o código original intacto. Dosomething (eu int) erro DoSomethingelse () ([] int, erro) } Tipo de estrutura de concreto { Cliente *Somepackage.client } func (c *concreto) doSomething (i int) erro { Retorne C.Client.Dosomething (i) } func (c *concreto) dosomethingelse () ([] int, error) { Retorne C.Client.DosomethingElse () }
Neste cenário, concreto é o código que você não pode modificar. Ao criar a interface do MyInterface e incorporar a estrutura de concreto original, você ganha a flexibilidade de zombar de seus métodos nos testes:
// substituir o tipo incorporado por uma simulação nos testes TIPO SOMECRECTET STRUT { MyInterface } func (m *mockconcrete) doSomething (i int) erro { // Implemente a lógica personalizada para zombar de algo }
type MyInterface interface { DoSomething(i int) error DoSomethingElse() ([]int, error) } type Concrete struct { client *somepackage.Client } func (c *Concrete) DoSomething(i int) error { return c.client.DoSomething(i) } func (c *Concrete) DoSomethingElse() ([]int, error) { return c.client.DoSomethingElse() }
alternativamente, como sugerido nos comentários, você também pode incorporar o tipo desejado diretamente em vez de criar uma interface separada. Isso permite que você zombe seletivamente apenas dos métodos necessários:
digite struct concreto { *Somepackage.client Am
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3