4.1 KiB
4.1 KiB
Testing Guide - Cubenet Backend
📋 Обзор тестирования
Проект использует несколько типов тестов:
- Unit Tests - тесты отдельных компонентов
- Integration Tests - тесты взаимодействия между компонентами
- SDK Tests - тесты клиентской библиотеки
🧪 Запуск тестов
Все тесты
cargo test --all
Unit tests только audit_logger
cargo test -p audit_logger
SDK tests
cargo test -p cubenet-sdk
С output
cargo test --all -- --nocapture
Show ignored tests
cargo test --all -- --ignored
📊 Результаты тестов
✅ audit_logger: 4 tests
- test_audit_log_creation
- test_audit_log_builder
- test_log_action
- test_log_error
✅ cubenet-sdk: 1 test
- test_client_creation
✅ All: 5 tests passed
🏗️ Структура тестов
tests/
├── lib.rs - Интеграционные тесты
└── integration/
└── audit_logger_integration.rs - Audit logger тесты
shared_libs/audit_logger/src/
├── models.rs - Unit tests для моделей
└── logger.rs - Unit tests для logger
sdk/cubenet-sdk/src/
└── client.rs - Unit tests для клиента
📝 Пример написания теста
Unit Test
#[tokio::test]
async fn test_audit_logger_action() {
let store = Arc::new(InMemoryAuditStore::new());
let logger = AuditLogger::new(store, "test_service");
let log = logger
.log_action(
Some("user_123".to_string()),
ActionType::Create,
"users".to_string(),
"/api/users".to_string(),
)
.await
.expect("Should log");
assert_eq!(log.user_id, Some("user_123".to_string()));
assert_eq!(log.action, ActionType::Create);
}
Integration Test
#[tokio::test]
async fn test_complete_workflow() {
// Setup
let store = Arc::new(InMemoryAuditStore::new());
let logger = AuditLogger::new(store, "test");
// Execute multiple operations
logger.log_action(...).await.ok();
logger.log_error(...).await.ok();
// Verify
let results = logger.search(SearchParams::default()).await?;
assert_eq!(results.total, 2);
}
🎯 Best Practices
- ✅ Каждая функция должна иметь хотя бы один тест
- ✅ Используйте
#[tokio::test]для async тестов - ✅ Тестируйте success и error cases
- ✅ Используйте descriptive names для тестов
- ✅ Isolate tests - каждый тест независим
🔄 Тестирование новых сервисов
Шаблон для новых микросервисов:
#[tokio::test]
async fn test_my_service_operation() {
// Arrange - Setup
let logger = Arc::new(AuditLogger::new(
Arc::new(InMemoryAuditStore::new()),
"my_service"
));
// Act - Execute
let result = my_service_function(&logger).await;
// Assert - Verify
assert!(result.is_ok());
// Verify audit log
let logs = logger.search(SearchParams::default()).await.ok();
assert_eq!(logs.map(|l| l.total), Some(1));
}
📊 Coverage
Для проверки покрытия кода:
cargo tarpaulin --package audit_logger --out Html
🐛 Debugging Tests
Запуск теста с output:
cargo test test_name -- --nocapture
Запуск одного теста:
cargo test test_audit_log_creation
🚀 CI/CD Integration
Тесты автоматически запускаются при:
cargo checkcargo buildcargo test
📈 Metrics
Текущие показатели:
- Total Tests: 5
- Pass Rate: 100%
- Coverage: ~70% (audit_logger)
- Build Time: ~6.5 sec
Status: ✅ All tests passing