"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > O patch de macaco pode resolver o problema de teste da base de código imutável de Go?

O patch de macaco pode resolver o problema de teste da base de código imutável de Go?

Postado em 2025-04-30
Navegar:504

Can Monkey Patching Solve Go's Unchangeable Code Base Testing Problems?

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
Tutorial mais recente Mais>

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