https://github.com/go-bdd/gobdd
BDD framework
https://github.com/go-bdd/gobdd
bdd gherkin go golang hacktoberfest tests
Last synced: about 2 months ago
JSON representation
BDD framework
- Host: GitHub
- URL: https://github.com/go-bdd/gobdd
- Owner: go-bdd
- License: mit
- Created: 2019-05-30T06:47:03.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2025-07-21T11:59:07.000Z (6 months ago)
- Last Synced: 2025-09-03T20:41:24.891Z (4 months ago)
- Topics: bdd, gherkin, go, golang, hacktoberfest, tests
- Language: Go
- Homepage: https://go-bdd.github.io/gobdd/
- Size: 213 KB
- Stars: 127
- Watchers: 11
- Forks: 19
- Open Issues: 9
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
- awesome-ddd - GOBDD - Small BDD framework for GO. (Libraries and Frameworks / GO)
README
# GOBDD
[](https://godoc.org/github.com/go-bdd/gobdd) [](https://coveralls.io/github/go-bdd/gobdd?branch=master)
This is a BDD testing framework. Uses gherkin for the test's syntax. From version 1.0, the API is stable.
## Why did I make the library?
There is godog library for BDD tests in Go. I found this library useful but it runs as an external application which compiles our code. It has several disadvantages:
- no debugging (breakpoints) in the test. Sometimes it’s useful to go through the whole execution step by step
- metrics don’t count the test run this way
- some style checkers recognise tests as dead code
- it’s impossible to use built-in features like build constraints.
- no context in steps - so the state have to be stored somewhere else - in my opinion, it makes the maintenance harder
## Quick start
Add the package to your project:
```
go install github.com/go-bdd/gobdd@latest
```
Inside `features` folder create your scenarios. Here is an example:
```gherkin
Feature: math operations
Scenario: add two digits
When I add 1 and 2
Then the result should equal 3
```
Add a new test `main_test.go`:
```go
func add(t gobdd.StepTest, ctx gobdd.Context, var1, var2 int) {
res := var1 + var2
ctx.Set("sumRes", res)
}
func check(t gobdd.StepTest, ctx gobdd.Context, sum int) {
received, err := ctx.GetInt("sumRes")
if err != nil {
t.Error(err)
return
}
if sum != received {
t.Error(errors.New("the math does not work for you"))
}
}
func TestScenarios(t *testing.T) {
suite := gobdd.NewSuite(t)
suite.AddStep(`I add (\d+) and (\d+)`, add)
suite.AddStep(`the result should equal (\d+)`, check)
suite.Run()
}
```
and run tests
```
go test ./...
```
More detailed documentation can be found on the docs page: https://go-bdd.github.io/gobdd/. A sample application is available in [a separate repository](https://github.com/go-bdd/sample-app).
# Contributing
All contributions are very much welcome. If you'd like to help with GoBDD development, please see open issues and submit your pull request via GitHub.
# Support
If you didn't find the answer to your question in the documentation, feel free to ask us directly!
Please join us on the `#gobdd-library` channel on the [Gophers slack](https://gophers.slack.com/): You can get [an invite here](https://gophersinvite.herokuapp.com/).
You can find updates about the progress on Twitter: [GoBdd](https://twitter.com/Go_BDD).
You can support my work using [issuehunt](https://issuehunt.io/r/go-bdd) or by [buying me a coffee](https://www.buymeacoffee.com/bklimczak).