mirror of
https://github.com/logos-storage/logos-storage-docs-obsidian.git
synced 2026-01-04 06:13:09 +00:00
158 lines
6.4 KiB
Markdown
158 lines
6.4 KiB
Markdown
|
|
A summary of running different test scenarios with `gotestsum` based on an example
|
||
|
|
|
||
|
|
## gotestsum Command Patterns
|
||
|
|
|
||
|
|
### 1. **Only Selected Test**
|
||
|
|
```bash
|
||
|
|
# Run a specific test function
|
||
|
|
gotestsum --packages="./communities" -f testname --rerun-fails -- -run "TestCodexArchiveDownloader_BasicSingleArchive$" -count 1
|
||
|
|
|
||
|
|
# Run specific testify test
|
||
|
|
gotestsum --packages="./communities" -f testname --rerun-fails -- -run "TestCodexArchiveDownloader_BasicSingleArchive_Testify$" -count 1
|
||
|
|
|
||
|
|
# Run multiple archives testify test
|
||
|
|
gotestsum --packages="./communities" -f testname --rerun-fails -- -run "TestCodexArchiveDownloader_MultipleArchives_Testify$" -count 1
|
||
|
|
```
|
||
|
|
|
||
|
|
### 2. **Only Selected Test Suite**
|
||
|
|
```bash
|
||
|
|
# Run the entire testify suite (all methods in the suite)
|
||
|
|
gotestsum --packages="./communities" -f testname --rerun-fails -- -run "TestCodexArchiveDownloaderSuite" -count 1
|
||
|
|
|
||
|
|
# Run a specific test method within the suite
|
||
|
|
gotestsum --packages="./communities" -f testname --rerun-fails -- -run "TestCodexArchiveDownloaderSuite/TestBasicSingleArchive" -count 1
|
||
|
|
```
|
||
|
|
|
||
|
|
### 3. **All Tests for Given Package**
|
||
|
|
```bash
|
||
|
|
# Run all tests in communities package
|
||
|
|
gotestsum --packages="./communities" -f testname --rerun-fails -- -count 1
|
||
|
|
|
||
|
|
# Alternative syntax (same result)
|
||
|
|
gotestsum --packages="./communities" -f testname --rerun-fails
|
||
|
|
|
||
|
|
# Run all tests with verbose output
|
||
|
|
gotestsum --packages="./communities" -f testname --rerun-fails -- -v -count 1
|
||
|
|
```
|
||
|
|
|
||
|
|
### 4. **Integration Tests**
|
||
|
|
```bash
|
||
|
|
# Run only integration tests (using build tags)
|
||
|
|
gotestsum --packages="./communities" -f testname --rerun-fails -- -tags=integration -run "Integration" -count 1
|
||
|
|
|
||
|
|
# Run integration tests with timeout (since they may take longer)
|
||
|
|
gotestsum --packages="./communities" -f testname --rerun-fails -- -tags=integration -run "Integration" -timeout=60s -count 1
|
||
|
|
|
||
|
|
# Run integration tests with specific environment variables
|
||
|
|
CODEX_HOST=localhost CODEX_API_PORT=8080 gotestsum --packages="./communities" -f testname --rerun-fails -- -tags=integration -run "Integration" -count 1
|
||
|
|
```
|
||
|
|
|
||
|
|
## Advanced gotestsum Patterns
|
||
|
|
|
||
|
|
### **Filter by Pattern (Multiple Tests)**
|
||
|
|
```bash
|
||
|
|
# Run all archive downloader tests (both standard and testify)
|
||
|
|
gotestsum --packages="./communities" -f testname --rerun-fails -- -run "ArchiveDownloader" -count 1
|
||
|
|
|
||
|
|
# Run only testify tests
|
||
|
|
gotestsum --packages="./communities" -f testname --rerun-fails -- -run "Testify" -count 1
|
||
|
|
|
||
|
|
# Run all CodexClient tests
|
||
|
|
gotestsum --packages="./communities" -f testname --rerun-fails -- -run "CodexClient" -count 1
|
||
|
|
```
|
||
|
|
|
||
|
|
### **Output Formats**
|
||
|
|
```bash
|
||
|
|
# Different output formats
|
||
|
|
gotestsum --packages="./communities" -f dots # Dots progress
|
||
|
|
gotestsum --packages="./communities" -f pkgname # Show package names
|
||
|
|
gotestsum --packages="./communities" -f testname # Show test names (recommended)
|
||
|
|
gotestsum --packages="./communities" -f standard-quiet # Minimal output
|
||
|
|
```
|
||
|
|
|
||
|
|
### **Multiple Packages**
|
||
|
|
```bash
|
||
|
|
# Run tests across multiple packages
|
||
|
|
gotestsum --packages="./communities,./cmd/upload,./cmd/download" -f testname --rerun-fails -- -count 1
|
||
|
|
|
||
|
|
# Run all packages recursively
|
||
|
|
gotestsum --packages="./..." -f testname --rerun-fails -- -count 1
|
||
|
|
```
|
||
|
|
|
||
|
|
### **Race Detection and Coverage**
|
||
|
|
```bash
|
||
|
|
# Run with race detection
|
||
|
|
gotestsum --packages="./communities" -f testname --rerun-fails -- -race -count 1
|
||
|
|
|
||
|
|
# Run with coverage
|
||
|
|
gotestsum --packages="./communities" -f testname --rerun-fails -- -cover -count 1
|
||
|
|
|
||
|
|
# Run with both race detection and coverage
|
||
|
|
gotestsum --packages="./communities" -f testname --rerun-fails -- -race -cover -count 1
|
||
|
|
```
|
||
|
|
|
||
|
|
## Key gotestsum Advantages
|
||
|
|
|
||
|
|
1. **Better Output Formatting**: Clean, colored output with test names
|
||
|
|
2. **Automatic Retry**: `--rerun-fails` reruns failed tests automatically
|
||
|
|
3. **JUnit XML Output**: `--junitfile=results.xml` for CI/CD integration
|
||
|
|
4. **JSON Output**: `--jsonfile=results.json` for parsing
|
||
|
|
5. **Watch Mode**: `--watch` to rerun tests on file changes
|
||
|
|
6. **Parallel Execution**: Better handling of parallel test output
|
||
|
|
|
||
|
|
## Complete Examples for Your Project
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Quick test of archive downloader functionality
|
||
|
|
gotestsum --packages="./communities" -f testname --rerun-fails -- -run "ArchiveDownloader" -count 1
|
||
|
|
|
||
|
|
# Full test suite with coverage
|
||
|
|
gotestsum --packages="./communities" -f testname --rerun-fails -- -cover -count 1
|
||
|
|
|
||
|
|
# Integration tests (when you have a Codex node running)
|
||
|
|
gotestsum --packages="./communities" -f testname --rerun-fails -- -tags=integration -timeout=60s -count 1
|
||
|
|
|
||
|
|
# Development workflow with watch mode
|
||
|
|
gotestsum --packages="./communities" -f testname --watch -- -count 1
|
||
|
|
```
|
||
|
|
|
||
|
|
The key difference from `go test` is that `gotestsum` provides much better visual feedback, automatic retry capabilities, and better CI/CD integration options while using the same underlying Go test infrastructure.
|
||
|
|
|
||
|
|
## Logs
|
||
|
|
|
||
|
|
In your tests you can include custom logs.
|
||
|
|
|
||
|
|
`go test -v` prints them without an issue, but for `gotestsum` to do the same you have to use `standard-verbose` format option:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
gotestsum --packages="./communities" -f standard-verbose --rerun-fails -- -run "TestCodexArchiveDownloaderSuite" -v -count 1
|
||
|
|
=== RUN TestCodexArchiveDownloaderSuite
|
||
|
|
=== RUN TestCodexArchiveDownloaderSuite/TestBasicSingleArchive
|
||
|
|
codex_archive_downloader_testify_test.go:112: ✅ Basic single archive download test passed (testify version)
|
||
|
|
codex_archive_downloader_testify_test.go:113: - All mock expectations satisfied
|
||
|
|
codex_archive_downloader_testify_test.go:114: - Callback invoked: true
|
||
|
|
=== RUN TestCodexArchiveDownloaderSuite/TestMultipleArchives
|
||
|
|
codex_archive_downloader_testify_test.go:190: ✅ Multiple archives test passed (suite version)
|
||
|
|
codex_archive_downloader_testify_test.go:191: - Completed 3 out of 3 archives
|
||
|
|
--- PASS: TestCodexArchiveDownloaderSuite (0.20s)
|
||
|
|
--- PASS: TestCodexArchiveDownloaderSuite/TestBasicSingleArchive (0.10s)
|
||
|
|
--- PASS: TestCodexArchiveDownloaderSuite/TestMultipleArchives (0.10s)
|
||
|
|
PASS
|
||
|
|
ok go-codex-client/communities 0.205s
|
||
|
|
|
||
|
|
DONE 3 tests in 0.205s
|
||
|
|
```
|
||
|
|
|
||
|
|
Compare this output with `-f testname`:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
gotestsum --packages="./communities" -f testname --rerun-fails -- -run "TestCodexArchiveDownloaderSuite" -count 1
|
||
|
|
PASS communities.TestCodexArchiveDownloaderSuite/TestBasicSingleArchive (0.10s)
|
||
|
|
PASS communities.TestCodexArchiveDownloaderSuite/TestMultipleArchives (0.10s)
|
||
|
|
PASS communities.TestCodexArchiveDownloaderSuite (0.20s)
|
||
|
|
PASS communities
|
||
|
|
|
||
|
|
DONE 3 tests in 0.205s
|
||
|
|
```
|
||
|
|
|
||
|
|
> Notice that the test suite itself is also counted as a test - this is one we see `DONE 3 tests` instead of `DONE 2 tests`.
|