goc alternatives and similar packages
Based on the "Testing Frameworks" category.
Alternatively, view goc alternatives based on common mentions on social networks and blogs.
-
dockertest
Write better integration tests! Dockertest helps you boot up ephermal docker images for your Go tests with minimal work. -
gnomock
Test your code without writing mocks with ephemeral Docker containers ๐ฆ Setup popular services with just a couple lines of code โฑ๏ธ No bash, no yaml, only code ๐ป -
embedded-postgres
Run a real Postgres database locally on Linux, OSX or Windows as part of another Go application or test -
gotest.tools
A collection of packages to augment the go testing package and support common patterns. -
go-testdeep
Extremely flexible golang deep comparison, extends the go testing package, tests HTTP APIs and provides tests suite -
testza
Full-featured test framework for Go! Assertions, fuzzing, input testing, output capturing, and much more! ๐ -
GoSpec
Testing framework for Go. Allows writing self-documenting tests/specifications, and executes them concurrently and safely isolated. [UNMAINTAINED] -
jsonassert
A Go test assertion library for verifying that two representations of JSON are semantically equal -
assert
:exclamation:Basic Assertion Library used along side native go testing, with building blocks for custom assertions -
gogiven
gogiven - BDD testing framework for go that generates readable output directly from source code
InfluxDB - Purpose built for real-time analytics at any scale.
Do you think we are missing an alternative of goc or a related project?
Popular Comparisons
README
goc
English | [็ฎไฝไธญๆ](./README_zh.md)
goc is a comprehensive coverage testing system for The Go Programming Language, especially for some complex scenarios, like system testing code coverage collection and accurate testing.
Enjoy, Have Fun! [Demo](docs/images/intro.gif)
Installation
# Mac/AMD64
curl -s https://api.github.com/repos/qiniu/goc/releases/latest | grep "browser_download_url.*-darwin-amd64.tar.gz" | cut -d : -f 2,3 | tr -d \" | xargs -n 1 curl -L | tar -zx && chmod +x goc && mv goc /usr/local/bin
# Linux/AMD64
curl -s https://api.github.com/repos/qiniu/goc/releases/latest | grep "browser_download_url.*-linux-amd64.tar.gz" | cut -d : -f 2,3 | tr -d \" | xargs -n 1 curl -L | tar -zx && chmod +x goc && mv goc /usr/local/bin
# Linux/386
curl -s https://api.github.com/repos/qiniu/goc/releases/latest | grep "browser_download_url.*-linux-386.tar.gz" | cut -d : -f 2,3 | tr -d \" | xargs -n 1 curl -L | tar -zx && chmod +x goc && mv goc /usr/local/bin
Goc supports both GOPATH
project and Go Modules
project with Go 1.11+. However, for developing goc, you need to install Go 1.13+.
Examples
You can use goc tool in many scenarios.
Code Coverage Collection for Your Golang System Tests
Goc can collect code coverages at runtime for your long-run golang applications. To do that, normally just need three steps:
- use
goc server
to start a service registry center:โ simple-go-server git:(master) โ goc server
- use
goc build
to build the target service, and run the generated binary. Here let's take the simple-go-server project as example:โ simple-go-server git:(master) โ goc build . ... // omit logs โ simple-go-server git:(master) โ ./simple-go-server
use
goc profile
to get the code coverage profile of the started simple server above:โ simple-go-server git:(master) โ goc profile mode: atomic enricofoltran/simple-go-server/main.go:30.13,48.33 13 1 enricofoltran/simple-go-server/main.go:48.33,50.3 1 0 enricofoltran/simple-go-server/main.go:52.2,65.12 5 1 enricofoltran/simple-go-server/main.go:65.12,74.46 7 1 enricofoltran/simple-go-server/main.go:74.46,76.4 1 0 ...
PS:
enricofoltran/simple-go-server/main.go:30.13,48.33 13 1 File: enricofoltran/simple-go-server/main.go Position of first point of this code block: 30.13 Position of second point of this code block: 48.33 Number of statements of this code block: 13 Number of executions of this code block: 1
Show Code Coverage Change at Runtime in Vscode
We provide a vscode extension - Goc Coverage which can show highlighted covered source code at runtime.
[Extension](docs/images/goc-vscode.gif)
Tips
To understand the execution details of goc tool, you can use the
--debug
flag. Also we appreciate if you can provide such logs when submitting a bug to us.By default, the covered service will listen a random port in order to communicate with the goc server. This may not be suitable in docker or kubernetes environment since the port must be exposed explicitly in order to be accessible by others in such environment. For this kind of scenario, you can use
--agentport
flag to specify a fixed port when callinggoc build
orgoc install
.To use a remote goc server, you can use
--center
flag to compile the target service withgoc build
orgoc install
command.The coverage data is stored on each covered service side, so if one service needs to restart during test, this service's coverage data will be lost. For this case, you can use following steps to handle:
- Before the service restarts, collect coverage with
goc profile -o a.cov
- After service restarted and test finished, collect coverage again with
goc profile -o b.cov
- Merge two coverage profiles together:
goc merge a.cov b.cov -o merge.cov
- Before the service restarts, collect coverage with
By default, goc will use the artifact's file name as its service name. You can overwrite it by setting environment variable
GOC_SERVICE_NAME
. (See #293 for details)
RoadMap
- [x] Support code coverage collection for system testing.
- [x] Support code coverage counters clear for the services under test at runtime.
- [x] Support develop mode towards accurate testing.
- [x] Support code coverage diff based on Pull Request.
- [ ] Optimize the performance costed by code coverage counters.
Contributing
We welcome all kinds of contribution, including bug reports, feature requests, documentation improvements, UI refinements, etc.
Thanks to all contributors!!
License
Goc is released under the Apache 2.0 license. See LICENSE.txt
*Note that all licence references and agreements mentioned in the goc README section above
are relevant to that project's source code only.