Kiedy piszę interfejs, często wygodnie jest definiować moje testy w tym samym pakiecie co interfejs, a następnie definiować wiele pakietów, które implementują zestaw interfejsów, np.W jaki sposób mogę mieć wspólny zestaw testów dla wielu pakietów w biegu?
package/
package/impl/x <-- Implementation X
package/impl/y <-- Implementation Y
Czy istnieje prosty sposób uruchomić ten sam zestaw testów (w tym przypadku, znajdujący się w opakowaniu/* _ test.go) w pakietach sub?
Najlepszym rozwiązaniem mam wymyślić tak daleko, aby dodać pakiet testowy:
package/tests/
który implementuje zestaw testów oraz test w każdym z wdrożeń, aby uruchomić testy, ale to ma dwie wady:
1) próby w opakowaniu/testy nie są w formacie _test.go i w końcu na część rzeczywistą biblioteki udokumentowana godoc itp
2) próby w opakowaniu/testy są uruchamiane przez niestandardowego biegacza testowego, który musi zasadniczo powielać wszystkie funkcjonalność "go test", aby skanować w poszukiwaniu testów i uruchamiać je.
Wydaje się być dość tandetnym rozwiązaniem.
Czy jest lepszy sposób na zrobienie tego?
Tak, to prawie to, co robię (używając argumentów var, aby umożliwić implowi dostarczenie funkcji konfiguracji i rozpadu, jeśli chce); jak już mówiłem, nieco denerwujące jest to, że funkcje pojawiają się w generowanym wynikowym dokumencie doc, a posiadanie jednego "mega testu", który uruchamia wszystkie testy podrzędne, powoduje, że test "go test" zawiesza się na wieki na tym jednym przedmiocie (zgadzam się z wszystkie twoje pozostałe punkty). – Doug
@Doug Wolę używać struct dla funkcji pomocniczych i danych; jest znacznie czystszy i możesz dostarczyć zero (domyślna wartość dla wskaźników), jeśli nie ma takiej funkcji. Możesz również usunąć niektóre testy, jeśli ustawisz [testing.Short()] (http://golang.org/pkg/testing/#Short) i usuniesz kilka przypadków testowych, jeśli tak jest. – fuz
@Doug BTW, jaki jest sens funkcji testowych w dokumentacji? Możesz przenieść je do innej paczki (zgodnie z sugestią), jeśli zaśmiecają dokumentację. – fuz