camel-test
Testing utilities for rust-camel.
Overview
camel-test provides two main utilities:
CamelTestContext — a test harness that removes boilerplate: registers components, provides simple start/stop methods, and exposes a shared MockComponent for assertions.
TimeController — deterministic time control for timer-based tests using tokio's built-in mock clock (no real sleep calls).
Basic usage
use camel_test::CamelTestContext;
use camel_builder::{RouteBuilder, StepAccumulator};
use std::time::Duration;
#[tokio::test]
async fn test_route() {
let h = CamelTestContext::builder()
.with_timer()
.with_mock()
.build()
.await;
let route = RouteBuilder::from("timer:tick?period=50&repeatCount=3")
.to("mock:result")
.build()
.unwrap();
h.add_route(route).await.unwrap();
h.start().await;
tokio::time::sleep(Duration::from_millis(300)).await;
h.mock().get_endpoint("result").unwrap().assert_exchange_count(3).await;
h.stop().await; }
With time control
use camel_test::CamelTestContext;
use camel_builder::{RouteBuilder, StepAccumulator};
use std::time::Duration;
#[tokio::test]
async fn test_route_fast() {
let (h, time) = CamelTestContext::builder()
.with_timer()
.with_mock()
.with_time_control()
.build()
.await;
let route = RouteBuilder::from("timer:tick?period=50&repeatCount=3")
.to("mock:result")
.build()
.unwrap();
h.add_route(route).await.unwrap();
h.start().await;
time.advance(Duration::from_millis(200)).await; tokio::task::yield_now().await;
h.mock().get_endpoint("result").unwrap().assert_exchange_count(3).await;
}
Available builder methods
| Method |
Effect |
.with_mock() |
Signals mock usage (always registered) |
.with_timer() |
Registers TimerComponent |
.with_log() |
Registers LogComponent |
.with_direct() |
Registers DirectComponent |
.with_component(c) |
Registers any custom component |
.with_time_control() |
Activates tokio mock clock; build() returns (harness, TimeController) |
Installation
Add to your Cargo.toml:
[dev-dependencies]
camel-test = "0.5"