This document explains how to generate test coverage reports for the NebulaStore project.
.\coverage.ps1./generate-coverage.shIf you prefer to run the commands manually:
# Run tests with coverage collection
dotnet test --collect:"XPlat Code Coverage"
# Install report generator (if not already installed)
dotnet tool install -g dotnet-reportgenerator-globaltool
# Generate HTML report
reportgenerator -reports:"**/coverage.cobertura.xml" -targetdir:"coverage-report" -reporttypes:"Html;HtmlSummary;Badges;TextSummary"-OpenReport $true(default) - Opens the report in browser automatically-OpenReport $false- Generates report without opening browser
Examples:
# Generate and open report
.\coverage.ps1
# Generate report only (don't open browser)
.\coverage.ps1 -OpenReport $false- Default behavior - Opens the report in browser automatically
--no-openor--no-browser- Generates report without opening browser-hor--help- Shows usage information
Examples:
# Generate and open report
./generate-coverage.sh
# Generate report only (don't open browser)
./generate-coverage.sh --no-open
# Show help
./generate-coverage.sh --helpThe scripts ensure coverage reports are always generated from scratch by:
- Cleaning old reports: Removes
coverage-report/directory - Removing test results: Deletes all
TestResults/directories recursively - Cleaning coverage files: Removes any
*.cobertura.xmlfiles - Cleaning build outputs: Runs
dotnet cleanto ensure fresh compilation - Fresh build: Rebuilds the solution with latest code
- Fresh test run: Runs tests with
--no-buildflag for consistency
The scripts will generate:
- HTML Report:
coverage-report/index.html- Interactive coverage report - Summary Report:
coverage-report/summary.html- High-level summary - Text Summary:
coverage-report/Summary.txt- Plain text summary - Coverage Badges: Various SVG badges for documentation
Based on the latest run:
- Line Coverage: 70.3% (619 of 880 lines)
- Branch Coverage: 59.3% (153 of 258 branches)
- Method Coverage: 78% (146 of 187 methods)
- NebulaStore.Storage.EmbeddedConfiguration: 88.2% ✅
- NebulaStore.Storage.Embedded: 71.1% ✅
- NebulaStore.Storage: 62.3%
⚠️
The following coverage-related files are automatically ignored by git:
coverage-report/- Generated HTML reportsTestResults/- Test result directories*.cobertura.xml- Coverage data files
- .NET 9.0 SDK
dotnet-reportgenerator-globaltool(automatically installed by scripts)
- Ensure .NET tools are in PATH:
export PATH="$PATH:$HOME/.dotnet/tools" - You may need to run
chmod +x generate-coverage.shto make the script executable - If coverage collection fails, ensure you have the latest .NET SDK installed
- Most distributions work out of the box with the script
- Ensure
xdg-openis available for browser opening (usually pre-installed)
- PowerShell script is recommended for best experience
- Bash script works in Git Bash, WSL, or Cygwin environments
Make sure .NET 9.0 SDK is installed and in your PATH. The PowerShell script automatically refreshes the PATH.
The scripts will automatically install the reportgenerator tool if it's not found.
Ensure tests are running successfully. The coverage collector only generates files when tests execute.
If you encounter issues on macOS:
- Permission denied: Run
chmod +x generate-coverage.sh - reportgenerator not found: Add to PATH:
export PATH="$PATH:$HOME/.dotnet/tools" - Coverage not collected: Ensure .NET SDK is properly installed:
dotnet --version - Browser not opening: The script will try
opencommand, or provide manual file path
You can integrate coverage reporting into your CI/CD pipeline:
# Example GitHub Actions step
- name: Generate Coverage Report
run: |
dotnet test --collect:"XPlat Code Coverage"
dotnet tool install -g dotnet-reportgenerator-globaltool
reportgenerator -reports:"**/coverage.cobertura.xml" -targetdir:"coverage-report" -reporttypes:"Html;Cobertura"Consider these targets for improving coverage:
- Line Coverage: Target 80%+
- Branch Coverage: Target 70%+
- Method Coverage: Target 85%+
Focus on testing:
- Core business logic
- Error handling paths
- Edge cases and boundary conditions