AutoTest
A Rust library and CLI tool for automatically generating test stubs for Rust projects. Uses AST analysis to understand your code structure and create meaningful integration tests.
Features
- ๐ AST-based Analysis: Analyzes Rust source code using
synandquote - ๐งช Integration Tests: Generates integration tests that call your public API
- ๐ Modular Organization: Creates separate test files for each module
- ๐ ๏ธ CLI Tool: Command-line interface for easy project integration
- ๐ Library API: Programmatic access for custom tooling and CI/CD integration
- ๐๏ธ Type-Aware: Generates appropriate assertions based on return types
- ๐งน Clean Architecture: Follows Rust best practices with proper error handling
Installation
As a Cargo binary
As a library dependency
[]
= "0.1"
Usage
Command Line
Generate tests for your entire Rust project:
Or from within a project directory:
Library API
use generate_tests_for_project;
// Generate integration tests for a project
match generate_tests_for_project
Example Output
For a project with this structure:
src/
โโโ lib.rs
โโโ cli/
โ โโโ mod.rs
โ โโโ generate.rs
โโโ core/
โโโ mod.rs
โโโ analyzer.rs
AutoTest generates:
tests/
โโโ integration_tests.rs
โโโ cli_generate_tests.rs
โโโ core_analyzer_rust_analyzer_tests.rs
Each test file contains integration tests that call your public APIs:
How It Works
- Analysis: Uses
synto parse Rust source files and extract public function signatures - Type Inference: Analyzes parameter types and return values
- Test Generation: Creates integration tests with appropriate setup and assertions
- Organization: Groups tests by module for maintainability
Supported Types
The tool generates test parameters for:
- Primitives:
String,&str,i32,u64,bool, etc. - Containers:
Vec<T>,Option<T>,Result<T, E> - References:
&T,&mut T - Custom Types: Falls back to
Default::default()for unknown structs
Supported Assertions
Different assertion strategies based on return types:
Result<T, E>โassert!(result.is_ok())Option<T>โassert!(result.is_some())Vec<T>โassert!(!result.is_empty())String/&strโassert!(!result.is_empty())- Numbers โ
assert!(result >= 0)
Limitations
- Public functions only: Currently analyzes only
pubfunctions - Rust only: No TypeScript support yet (planned)
- Basic parameters: Complex custom types use
Default::default() - Integration tests: Currently generates integration-style tests only
Development
# Clone and build
# Run tests
# Run on example project
Contributing
Contributions are welcome! Please feel free to:
- Report bugs and issues
- Suggest new features
- Submit pull requests
- Improve documentation
License
Licensed under the MIT License. See LICENSE for details.
Changelog
See CHANGELOG.md for a list of changes and version history.