2016-03-26 9 views
0

Ich habe eine Frage zu Code-Coverage-Erzeugung in Go (lang) projects.I haben diese einfache Struktur:Testing in GO - Code-Coverage innerhalb von Projektpaketen

ROOT/ 
    config/ 
    handlers/ 
    lib/ 
    models/ 
    router/ 
    main.go 

config enthält Konfiguration in JSON und einem einfachen config.go dass liest und analysiert JSON Datei und füllt die Config struct die dann verwendet wird, wenn DB-Verbindung zu initialisieren. handlers enthält Controller (d. H. Handler der jeweiligen METHOD + URL beschrieben in router/routes.go). lib enthält einige DB, Request Responder und Loggerlogik. models enthält Strukturen und ihre Funktionen, die von-zu JSON und DB gemappt werden sollen. Schließlich enthält router die Router- und Routen-Definition.

Grundsätzlich nur durch das Testen eines einzelnen Handlers sicherstellen, dass meine Konfiguration, Logger, db, Responder, Router und entsprechendes Modell aufgerufen werden (und auch irgendwie getestet).

Nun, wenn dies eine PHP oder Java wäre oder ich weiß nicht, was sonst Sprache, würde die Durchführung und Durchführung dieser Single-Handler-Test eine Codeabdeckung auch für alle anderen aufgerufenen Teile des Codes erstellen, auch wenn sie in verschiedenen Ordnern sind (dh Pakete hier). Leider ist das bei Go nicht der Fall.

Und es gibt sehr wenig Code in den meisten meiner lib Dateien nur eine Methode, die (wie InitDB() oder ReadConfig() oder NewRouter() oder Logger()) so in der Lage zu sein, Code-Coverage zu haben, um ihnen, dass ich dumm Tests in diesen Paketen erstellen haben, wie gut, während sie bereits aufgerufen und getestet wurden, indem sie die Haupt-URLs, die Pakete handhaben, getestet haben.

Gibt es eine Möglichkeit, wie Code-Coverage von Paketen erhalten auch für andere Pakete enthalten in einem Projekt?

Antwort

0

Sie können Ihre Pakete in einem einzigen Test importieren und für sie Tests schreiben auf, wie werden sie in Ihrer Anwendung verwendet werden. Zum Beispiel können Sie einen Test haben, main_test.go, der alle anderen Pakete importiert, und dann schreiben Sie Tests für die Methoden in den importierten Paketen.
wie folgt aus (in main_test.go):

package main 

import (
    "testing" 
    "lib" 
    "models" 
    "handlers" 
    // etc 
) 

// testing code here 

jedoch in meiner persönlichen Meinung nach, könnte es besser sein, um sicherzustellen, dass jedes Paket tut, was es soll, und dass nur. Der beste Weg, dies zu tun, ist das Testen des einzelnen Pakets selbst mit einer eigenen Testsuite.

+0

Wenn Sie den ersten Teil entfernen (wie es offensichtlich nicht beabsichtigt ist, dass in Gehen Sie zu tun) und halten nur Ihre (wenn auch persönlich, aber ich stimme mit Ihnen hier so können wir es eine gute Praxis betrachten) Meinung, werde ich wahrscheinlich akzeptieren Sie Ihre Antwort, wenn es nicht besser bis morgen Abend ist :-) – shadyyx

+0

ich weiß, es ist nicht so zu tun Tests gedacht, aber es ist der einzige Weg, (die ich kenne), um die „Code-Coverage“ Sie wollen während des Tests zu erhalten. Ich habe diesen Teil hinzugefügt, weil ich glaube, dass er deine Frage beantwortet. – AJPennster