Framework BDD dla Go

4

Od jakiegoś czasu skrobię bibliotekę do BDD dla #go https://github.com/go-bdd/gobdd, tutaj trochę dokumentacji https://go-bdd.github.io/doc/
Byłbym wdzięczny za potestowanie i feedback co mogę poprawić/dodać.

Ogólnie cel jest taki: napisać framework, który ma ułatwić maksymalnie pisanie testów BDD w oparciu o składnie gherkina https://cucumber.io/docs/gherkin/reference/
Nie będzie w 100% kompatybilny z nim (na razie, mam kilka wyzwań do przezwyciężenia), ale ideę chcę zachować jak najmocniej.

Główną różnicą w porównaniu z godog jest fakt, iż ta biblioteka uruchamia testy z zewnętrznego procesu przez co nie ma dostępu do takich ficzerów jak debuggowanie, profilowanie itp czyli to co można zrobić ze standardowymi testami.

1

Aktualizacja: Dodanie pakietu testhttp -> https://go-bdd.github.io/doc/testhttp.html

Dzięki niemu możemy łatwo testować handlery HTTP. Mamy do dyspozycji 4 predefiniowane kroki.

  • I make a (GET|POST|PUT|DELETE|OPTIONS) request to "([^"]*)
  • the response code equals (\d+)
  • the response contains a valid JSON
  • the response is "(.*)"

Na pewno dodam ich więcej później.

// Wrzuciłem info o bibliotece na reddita i dostałem tam całkiem przychylne komentarze :) https://www.reddit.com/r/golang/comments/cgv3km/gobdd_new_bdd_framework_for_go/

0

Ostatnio wypchnąłem pierwszą wersję alpha -> https://github.com/go-bdd/gobdd/releases/tag/v1.0-alfa

Myślę, że okiełznałem API libki na tyle by myśleć o stabilnej wersji :) w kolejnych krokach chcę popracować nad dokumentacją oraz rozbudowywaniem gotowych kroków do reużycia.
Jest też podprojekt, który ma na celu dodanie wsparcia dla biblioteki w VSCode https://github.com/go-bdd/vscode-extension. Na razie na etapie init.

1

@no_solution_found: tak tylko podpowiem, że Cucumber ma już składnię, która IMHO jest czytelniejsza od regexów - https://cucumber.io/docs/cucumber/cucumber-expressions/. Sam to zaimplementowałem w Watermelonie, bibliotece do BDD w Elixirze. Wtedy zamiast pisać:

suite.AddStep("the response code equals (\d+)", check)

Można użyć:

suite.AddStep("the response code equals {int}", check)

Ja u siebie dodatkowo zezwalam na definiowanie własnych przy pomocy

Watermelon.Expression.register_type(:bin, ~r/[01]+/, fn data ->
  String.to_integer(data, 2)
end)

U Ciebie to pewnie wyglądałoby w stylu:

suite.RegisterExpression("bin", "[01]+", translate)

1 użytkowników online, w tym zalogowanych: 0, gości: 1