go n'a pas de cadre moqueur intégré comme certaines autres langues (par exemple, moquette pour Java). Cependant, vous pouvez créer efficacement des simulations et des talons à l'aide d'interfaces et de structures. La clé est de définir des interfaces qui représentent les dépendances avec lesquelles votre code interagit. Ensuite, vous créez des implémentations concrètes pour votre code réel et des implémentations simulées séparées pour les tests.
illustrons avec un exemple: imaginez que vous avez une fonction qui interagit avec une base de données:
<code class="Go"> Type Database Interface {getData (id int) (String, Erreur) * RealDatabase) getData (id int) (chaîne, erreur) {// ... Interaction réelle de la base de données ... return & quot; data de la base de données & quot;, nil} func processData (db base de données, id int) (chaîne, erreur) {data, err: ERR: = db.getData (id) si err! = Nil {return & quot; &; &; &; ". & quot; traité: & quot; Données, Nil} </code> Pre> <p> Maintenant, créons un maquette: </p> <pre class="brush:php;toolbar:false"> <code class="go"> Type MockDatabase Struct {getDatafunc Func (int) (String, Error)} func (m * MockDatabase) getData (id int) (String, Error) {if M.getData } return & quot; & quot;, nil // ou return une valeur / erreur par défaut} </code>
Dans votre test, vous pouvez utiliser le mockDatabase
Pour contrôler les valeurs de retour de getData
:
<code class="go"> func testprocessedata (t * test.t) {Mockdb: = Func TestProcessData (T * TEST & amp; MockDatabase {getDatafunc: func (id int) (String, error) {if id == 1 {return & quot; Test data & quot;, nil} return & quot; & quot;, errors.new (& quot; data non trouvé & quot;)},} résultat, err: = processData. & quot; traité: Test Data & quot;, résultat) Résultat, err = processData (mockdb, 2) assert.error (t, err)} </code>
Cet exemple montre une simulation simple. Les talons sont encore plus simples; Ils renvoient généralement des valeurs prédéfinies sans logique complexe dans la fonction de simulation.
MockDatabase
, MockgetData
). Testify / assert faire des affirmations d'écriture dans vos tests beaucoup plus nettoyants et plus lisibles.
Dans l'exemple processData
ci-dessus, le Mock MockDatabase
isolate processData
de la base de données réelle. Le test peut vérifier le comportement de processData
quel que soit l'état ou la disponibilité de la base de données. Cette isolation est la clé pour écrire des tests unitaires fiables et reproductibles.
Alors que la bibliothèque standard de Go ne fournit pas un framework moqueur dédié, plusieurs bibliothèques tierces peuvent aider à simplifier le processus:
bibliothèque qui fournit une approche de génération de code pour créer des simulations. Il peut automatiser la création de structures et de méthodes simulées en fonction de vos interfaces, en réduisant le code du chauffeur.
gomock
: Un autre concurrent fort, gomock
offre une solution moqueuse plus puissante et flexible. Il permet des scénarios de moquerie plus avancés, y compris le réglage des attentes et la vérification. Cependant, cela nécessite un peu plus de configuration. Le choix entre ces bibliothèques dépend souvent de la complexité et de la préférence du projet. Pour des projets plus simples, la création manuelle de simulation pourrait suffire. Pour les projets plus importants ou les exigences de moquerie complexes, Tesify / Mock
ou gomock
peut améliorer considérablement l'efficacité et réduire la baillite.
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!