Testowanie oprogramowania to proces, który ocenia metryki programów za pomocą narzędzi, skryptów lub ręcznie.
Testowanie jest integralną częścią cyklu tworzenia oprogramowania. Kompleksowe testy dostarczają szczegółowych informacji na temat integralności Twojej aplikacji.
Możesz zapobiegać i naprawiać błędy, pisząc testy, oceniając wydajność programu i automatyzując przepływy pracy.
Pierwsze kroki z testowaniem w Go
Standardowa biblioteka Go zapewnia ewolucję testowanie pakiet. The testowanie pakiet ma benchmarking, fuzzing, pomijanie, podtesty, pod-benchmarking i inne funkcje.
Testowanie za pomocą tego pakietu jest łatwe. Oto prosta struktura testowa, która posłuży jako model dla testu:
rodzaj Sprawy struktura {
// oczekiwany wynik testu
spodziewany int// wyjście funkcji
rzeczywisty int
// wartość, którą przekazujesz do funkcji
argument strunowy
}
Oto prosta funkcja, która konwertuje łańcuchy na liczby całkowite. Twój test przetestuje tę funkcję.
import (
„str.konw”
)funkcjonowaćStringToInteger(str strunowy)int {
liczba całkowita, błąd := strconv. Atoi (ulica)jeśli błąd != zero {
zwrócić0
}
zwrócić liczba całkowita
}
The StringToInteger funkcja zwraca 0 jeśli wystąpił błąd podczas konwersji i liczbę całkowitą, jeśli nie ma błędów.
Oto funkcja testowa dla StringToInteger:
funkcjonowaćTestStringToInteger(test *testowanie. T) {
oczekiwaneInt := StringToInteger("3")caseInstance := Przypadki {
oczekiwane: oczekiwanoInt,
rzeczywisty: 3,
}
jeśli caseInstance.expected == caseInstance.actual {
// tutaj jakiś kod
} w przeciwnym razie {
test. Ponieść porażkę()
}
}
The TestStringToInteger funkcja testowa akceptuje a testowanie. T obiekt jako argument. The oczekiwanoInt zmienna przechowuje wynik konwersji ciągu. The przypadkuInstancja zmienna jest skonkretyzowaną strukturą Cases dla testu. The jeśli zestawienie porównuje wartości oczekiwane i rzeczywiste.
The Ponieść porażkę metoda zwraca nieudany test w instrukcji else, jeśli wartości nie są równe.
Idź zapewnia test polecenie do automatyzacji i pobierania informacji o testach i programach.
iść test
iść pomóż testować
Strona pomocy zawiera szczegółowe informacje o tym, jak idź test Pracuje:
Ekosystem Go zawiera wiele bibliotek, dzięki którym testowanie jest bardziej przystępne i elastyczne. Poza tym jest mnóstwo funkcjonalności testowanie pakiet, w tym regresja i testy jednostkowe.
Pakiet zeznań
Pakiet zeznań to jeden z najpopularniejszych frameworków Go do testowania pakietów. Zapewnia narzędzia potrzebne do pisania wydajnych testów, z łatwymi asercjami, mockowaniem i funkcjami pakietu testowego.
Testify nadaje się do programowania opartego na testach, ponieważ pakiet zapewnia kpina pakiet. Zapewnia to mechanizm do pisania atrap obiektów, których możesz użyć zamiast rzeczywistych obiektów podczas testowania.
Pakiet zawiera również:
- jakiś zapewniać pakiet dostarczający pomocne metody pisania przyjaznych, czytelnych testów.
- A wymagać pakiet podobny do zapewniać pakiet do zwracania wyników logicznych.
- A zestaw pakiet dla zestawów testowych ze strukturami.
Zeznaj rozciąga się na testowanie pakiet i możesz użyć idź test polecenie do uruchamiania testów napisanych z pakietem Testify.
Testify obsługuje wersje Go od 1.13. Możesz dodać pakiet jako zależność projektu za pomocą tego polecenia:
iść weź github.com/stretchr/testify
Oto prosty test asercji z pakietem Testify zapewniać pakiet:
pakiet Główny
import (
"testowanie"
„github.com/stretchr/zeznaj/asert” // asercja tylko pakietu
)// nazwa funkcji powinna być zgodnie z konwencją „Coś”
funkcjonowaćPrzetestuj coś(t *testowanie. T) {
// twierdzenie o równości
zapewniać. Równe (t, 123, 123, „powinny być równe”)
// stwierdzanie nierówności
zapewniać. Nierówne (t, 123, 456, „nie powinny być równe”)
}
The Przetestuj coś funkcja test przyjmuje strukturę typu testującego z testowanie pakiet jako argument. The Równy oraz Nie równe metody są dla twierdzeń opartych na równości i nierówności z Testify zapewniać pakiet.
Pakiet GoConvey
GoConvey to narzędzie do testowania Go, które jest przygotowane do ekspresji ponad testowanie pakiet. Obejmuje terminal (CLI) i przeglądarka (GUI) testowanie funkcjonalności.
Pakiet GoConvey integruje się z testowanie pakiet, udostępniający webowy interfejs użytkownika do pracy z natywnymi testami Go. Zawiera również funkcjonalność testów regresji, konfigurowalnych wyników i generowania kodu testowego. Możesz uruchamiać testy automatycznie, uzyskiwać dostęp do formatów pokrycia w HTML i dostosowywać GUI.
Uruchom to polecenie w terminalu obszaru roboczego Go, aby zainstalować pakiet Go Convey.
iść wejdź na github.com/smartystreets/goconvey
Oto prosty przykład pisania testów z pakietem GoConvey.
pakiet Główny
import (
. „github.com/smartystreets/goconvey/transport”
"testowanie"
)funkcjonowaćPrzetestuj coś(t *testowanie. T) {
// Przekaż t tylko do wywołań przekazu najwyższego poziomu
Convey("Zadeklaruj zmienną", t, funkcjonować() {
x := 1Convey("zmienna przyrostu", funkcjonować() {
x++
Convey("potwierdzaj równość", funkcjonować() {
Tak więc (x, powinno być równe, 2)
})
})
})
}
Musisz zaimportować przekazywać pakiet przy użyciu notacji kropkowej do testu.
Funkcja transportu od Przekazywać pakiet pomaga w testowaniu zakresu. Ostatni Przekazywać wywołanie funkcji w przykładzie kodu potwierdza równość między x zmienna i 2, używając Powinien być równy funkcjonować.
Pakiet oczekiwany HTTP
The Oczekiwanie HTTP package to łatwy w użyciu, zwięzły, deklaratywny pakiet do kompleksowego testowania HTTP i API REST w Go. Można go używać do przyrostowego tworzenia żądań HTTP i rekursywnego sprawdzania odpowiedzi i ich ładunku.
The httpoczekuj pakiet to zestaw konstruktorów umożliwiających tworzenie łańcuchów dla żądań HTTP i asercji dotyczących odpowiedzi HTTP i ładunków. Jest zbudowany na http, testowaniei inne pakiety. Pakiet działa również dobrze z wbudowanym httptest pakiet.
httpoczekuj zapewnia funkcjonalność budowania żądań z konstrukcją adresów URL, nagłówkami, plikami cookie i ładunkami. Obsługuje asercje odpowiedzi, asercje ładunku, ładne drukowanie i WebSockets.
Uruchom to polecenie w terminalu swojego katalogu roboczego, aby zainstalować httpoczekuj pakiet.
iść weź github.com/gavv/httpexpect
Oto prosty przykład testowania funkcji obsługi za pomocą httpoczekuj pakiet.
pakiet Główny
import (
„fmt”
„github.com/gavv/httpexpect/v2”
„sieć/http”
„net/http/httptest”
"testowanie"
)funkcjonowaćprzykładHandler()http.Treser {
zwrócić http. Funkcja obsługi (funkcjonować(pisarz http. ResponseWriter, żądanie *http. Żądanie) {
fmt. Fprintln (pisarz, „Witaj świecie”)
})
}funkcjonowaćTestprzykładuHandler(t *testowanie. T) {
// utwórz http. Treser
handler := przykładObsługa()// uruchom serwer używając httptest
serwer := httptest. Nowy serwer (obsługa)
odraczać serwer. Blisko()// utwórz http oczekiwana instancja
oczekiwać := httpoczekiwać. Nowy (t, serwer. URL)
// czy to działa?
oczekiwać. DOSTAWAĆ("/").
Oczekiwać().
Stan (http. StatusOK).JSON().Array().Empty()
}
The przykładHandler funkcja handler zwraca procedurę obsługi HTTP dla httpoczekuj pakiet. The TestprzykładuHandler function deklaruje instancję funkcji obsługi. Następnie tworzy nowy serwer do testowania punktu końcowego za pomocą httptest pakiet.
The oczekiwać zmienna jest twoja httpoczekuj instancja, która uderza w DOSTAWAĆ żądać ścieżki głównej punktu końcowego na serwerze. The Status funkcja zwraca kod statusu (w tym przypadku, 200), jeśli test się powiedzie.
Napisz kompleksowe i intuicyjne testy
Testy mają duży wpływ na ocenę integralności aplikacji, a istnieje wiele wzorców i metod testowania, których możesz użyć w swoich programach. U podstaw przepływu pracy testowania należy napisać intuicyjne testy, które można ulepszać w miarę zmian programów w czasie.