2017-09-16 3 views
0

Un programme GO se connecte à une base de données à l'aide d'une chaîne de connexion. Actuellement, cette chaîne de connexion est stockée dans une variable d'environnement.Go - le test d'intégration utilise la connexion à la base de données de test

Mon défi est d'écrire un test automatisé qui exerce le programme contre une base de données de test.

Je pensais définir la variable d'environnement chaîne de connexion dans la fonction init() du test, mais la fonction init() du programme principal est appelée avant le test init(), donc cela ne fonctionne pas.

La solution de contournement semble être de définir par défaut la chaîne de connexion à la base de données de test. Si aucune variable d'environnement n'est définie, utilisez test; si elle est définie (production), utilisez-la à la place.

Existe-t-il une alternative? Est-ce qu'il y a une meilleure approche?

+0

La connexion db utilisée par votre programme est-elle globale? Si oui, faites en sorte que votre test crée un test de connexion et définissez-le comme la valeur de la variable globale. – mkopriva

+0

'var db = DB.getConnectionUsingEnvironmentVariable()' –

+0

Ceci est dans le programme principal. Ceci actuellement panique. Je pourrais le changer afin qu'il ne tente pas de créer une connexion si la variable d'environnement est manquante, et appeler le même code du test, une fois que j'ai défini la variable d'environnement. Est-ce ce que vous aviez en tête? –

Répondre

0

Ma solution actuelle est de rendre la connexion globale non initialisée. La fonction vérifie si la connexion est nulle - si c'est le cas, elle l'initialise. Le test a une fonction setup() qui établit la connexion à la base de données de test d'intégration - une alternative serait que le test définisse simplement la variable d'environnement.

+0

si vous utilisez mysql je suggère https://github.com/DATA-DOG/go-sqlmock si vous ne voulez pas vous moquer des structures vous-même. – reticentroot