#[test]Expand description
Marks async function to be executed by async runtime, suitable to test environment
It supports:
By default it uses tokio runtime. Switch runtime with feature flags:
tokio: tokio runtime;monoio: monoio runtime;
§Usage for tokio runtime
§Multi-thread runtime
#[async_entry::test(flavor = "multi_thread", worker_threads = 1)]
async fn my_test() {
assert!(true);
}worker_threads>0 implies flavor="multi_thread".
worker_threads==0 implies flavor="current_thread".
§Using default
The default test runtime is single-threaded.
#[async_entry::test]
async fn my_test() {
assert!(true);
}§Configure the runtime to start with time paused
#[async_entry::test(start_paused = true)]
async fn my_test() {
assert!(true);
}Note that start_paused requires the test-util feature to be enabled.
§Add initialization statement
#[async_entry::test(init = "init_log!()")]
async fn my_test() {
assert!(true);
}
// Will produce:
//
// fn my_test() {
//
// let _g = init_log!(); // Add init statement
//
// let body = async { assert!(true); };
// let rt = ...
// rt.block_on(body);
// }§Add tracing span over the test fn
#[async_entry::test(tracing_span = "info")]
async fn my_test() {
assert!(true);
}
// Will produce:
//
// fn my_test() {
// let body = async { assert!(true); };
//
// use ::tracing::Instrument; // Add tracing span
// let body_span = ::tracing::info_span("my_test"); //
// let body = body.instrument(body_span); //
//
// let rt = ...
// rt.block_on(body);
// }§Use other lib to import tracing and tracing_future
#[async_entry::test(tracing_span = "info" ,tracing_lib="my_lib::")]
async fn my_test() {
assert!(true);
}
// Will produce:
//
// fn my_test() {
// let body = async { assert!(true); };
//
// use my_lib::tracing::Instrument; // Add tracing span
// let body_span = my_lib::tracing::info_span("my_test"); //
// let body = body.instrument(body_span); //
//
// let rt = ...
// rt.block_on(body);
// }§Usage for monoio runtime
When using monoio runtime with feature flag monoio enabled:
flavor, worker_threads and start_paused are ignored.
It is the same as using tokio runtime, except the runtime is monoio:
#[async_entry::test()]
async fn my_test() {
assert!(true);
}
// Will produce:
//
// fn my_test() {
// // ...
//
// let body = async { assert!(true); };
// let rt = monoio::RuntimeBuilder::<_>::new()...
// rt.block_on(body);
// }§NOTE:
If you rename the async_entry crate in your dependencies this macro will not work.