Maison > développement back-end > Golang > Monkey Patching peut-il résoudre les problèmes de test de base de code immuable de Go ?

Monkey Patching peut-il résoudre les problèmes de test de base de code immuable de Go ?

DDD
Libérer: 2024-12-15 15:11:18
original
912 Les gens l'ont consulté

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

Monkey Patching in Go : une solution pour des bases de code immuables

Travailler avec des bases de code qui ne sont pas programmées pour les interfaces et qui sont fortement interconnectées peut présenter défis en matière de tests et d’analyse comparative. Dans de tels scénarios, les techniques de moquerie traditionnelles peuvent ne pas être applicables. Cependant, il existe une stratégie dans Go qui peut aider : le patching de singe.

Face à une situation similaire, l'approche suggérée consiste à créer une interface personnalisée en tant que wrapper autour du code non modifiable. Cela vous permet de vous moquer de méthodes spécifiques dans les tests tout en laissant le code d'origine intact.

Pour illustrer, considérons l'exemple suivant :

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()
}
Copier après la connexion

Dans ce scénario, Concrete est le code que vous ne pouvez pas modifier . En créant l'interface MyInterface et en intégrant la structure Concrete d'origine, vous gagnez la flexibilité de simuler ses méthodes dans les tests :

// Replace the embedded type with a mock in tests
type MockConcrete struct {
    MyInterface
}

func (m *MockConcrete) DoSomething(i int) error {
    // Implement custom logic for mocking DoSomething
}
Copier après la connexion

Cette approche fournit un moyen de tester des fonctionnalités spécifiques sans modifier le code sous-jacent.

Alternativement, comme suggéré dans les commentaires, vous pouvez également intégrer directement le type souhaité au lieu de créer une interface distincte. Cela vous permet de moquer sélectivement uniquement les méthodes dont vous avez besoin :

type Concrete struct {
    *somepackage.Client
}
Copier après la connexion

Cette stratégie conserve la possibilité d'accéder aux méthodes non moquées directement sur le type intégré, offrant une plus grande flexibilité dans les tests.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal