Jak mogę przeprowadzić ogólne przetwarzanie konfiguracji testów, które ustawia etap dla wszystkich testów podczas korzystania z pakietu testowego ?
Jako przykład w Nunit istnieje [SetUp]
atrybut.
[TestFixture]
public class SuccessTests
{
[SetUp] public void Init()
{ /* Load test data */ }
}
unit-testing
go
miltonb
źródło
źródło
Odpowiedzi:
Począwszy od Go 1.4 możesz zaimplementować konfigurację / dezaktywację (nie ma potrzeby kopiowania funkcji przed / po każdym teście). Dokumentacja jest opisana tutaj w sekcji głównej :
Zajęło mi trochę czasu, zanim zrozumiałem, że oznacza to, że jeśli test zawiera funkcję,
func TestMain(m *testing.M)
to ta funkcja zostanie wywołana zamiast uruchamiania testu. W tej funkcji mogę zdefiniować, jak będą przebiegać testy. Na przykład mogę zaimplementować globalną konfigurację i porzucić:Kilka innych przykładów można znaleźć tutaj .
źródło
TestMain
znajduje się w pakiecie, więc nie jest to przydatne. Uważam, że podtesty są lepsze do bardziej złożonych celów.lstat $GOROOT/subtests: no such file or directory
Można to osiągnąć, umieszczając
init()
w_test.go
pliku funkcję . To zostanie uruchomione przedinit()
funkcją._Test.init () zostanie wywołana przed funkcją pakietu init ().
źródło
[TestFixtureSetUp]
atrybutu NUnit .Biorąc pod uwagę prostą funkcję do testu jednostkowego:
Możesz to przetestować za pomocą funkcji konfiguracji, która zwraca funkcję porzucenia. Po wywołaniu setup () możesz wykonać odroczone wywołanie teardown ().
Narzędzie do testowania Go zgłosi instrukcje logowania w konsoli powłoki:
Dzięki takiemu podejściu możesz przekazać dodatkowe parametry do konfiguracji / usunięcia.
źródło
Zazwyczaj testy w go nie są napisane w tym samym stylu, co inne języki. Często jest stosunkowo mniej funkcji testowych, ale każda zawiera zestaw przypadków testowych oparty na tabeli. Zobacz ten artykuł napisany przez jednego z członków zespołu Go.
W przypadku testu opartego na tabeli po prostu umieszczasz kod konfiguracyjny przed pętlą, która wykonuje poszczególne przypadki testowe określone w tabeli, a następnie umieszczasz dowolny kod czyszczący.
Jeśli nadal masz współdzielony kod konfiguracji między funkcjami testowymi, możesz wyodrębnić udostępniony kod konfiguracji do funkcji i użyć,
sync.Once
jeśli ważne jest, aby został wykonany dokładnie raz (lub jak sugeruje inna odpowiedź, użyjinit()
, ale ma to tę wadę, że konfiguracja zostanie wykonane, nawet jeśli przypadki testowe nie są uruchomione (być może dlatego, że ograniczyłeś przypadki testowe za pomocągo test -run <regexp>
.)Powiedziałbym, że jeśli uważasz, że potrzebujesz wspólnej konfiguracji między różnymi testami, które są wykonywane dokładnie wtedy, gdy powinieneś się zastanowić, czy naprawdę tego potrzebujesz, i jeśli test oparty na tabeli nie byłby lepszy.
źródło
Struktura testowa Go nie ma nic równoważnego z atrybutem SetUp NUnit (oznaczającym funkcję, która ma zostać wywołana przed każdym testem w zestawie). Jest jednak kilka opcji:
Po prostu wywołaj swoją
SetUp
funkcję z każdego testu, gdy jest potrzebna.Użyj rozszerzenia do platformy testowej Go, która implementuje paradygmaty i koncepcje xUnit. Przychodzą na myśl trzy mocne opcje:
Każda z tych bibliotek zachęca Cię do organizowania testów w pakiety / urządzenia podobne do innych frameworków xUnit i wywoła metody konfiguracji dla typu pakietu / urządzenia przed każdą z
Test*
metod.źródło
Bezwstydna wtyczka, stworzyłem https://github.com/houqp/gtest, aby pomóc rozwiązać dokładnie ten problem.
Oto krótki przykład:
Możesz utworzyć dowolną grupę testową w pakiecie z każdą z nich przy użyciu innego zestawu procedur konfiguracji / dezaktywacji.
źródło