1 个不稳定版本
0.1.0 | 2023 年 8 月 17 日 |
---|
#440 in 测试
16KB
127 行
🐔️ Tokitsuge
Tokitsuge 是一个友好的单元测试工具,提供获取当前时间的功能。
用法
只需将 SystemTime::now
替换为 Clock::now
。
use tokitsuge::Clock;
fn some_time_depended_function() {
Clock::now()
}
此代码本身只是调用 SystemTime::now
来获取系统时间(因此在生产环境中没有额外的开销)。启用 Cargo.toml
中的 freeze
功能运行测试将更改行为。
[dependencies]
tokitsuge = "0.1.0"
[dev-dependencies]
tokitsuge = { version = "0.1.0", features = ["freeze"] }
use tokitsuge::Clock;
fn some_time_depended_function() {
Clock::now()
}
#[cfg(test)]
mod tests {
use std::thread::sleep;
use std::time::Duration;
use super::*;
#[test]
fn test_some_time_depended_function() {
// Real system time.
let t1 = some_time_depended_function();
{
let frozen_clock = Clock::freeze();
// Fixed time.
let ft1 = some_time_depended_function();
assert_eq!(ft1, frozen_clock.fixed_time());
// This function will always return the same time until `frozen_clock` is dropped.
sleep(Duration::from_millis(1));
let ft2 = some_time_depended_function();
assert_eq!(ft1, ft2);
// Instead of sleep, FrozenClock#advance and FrozenClock#unwind can be used.
frozen_clock.advance(Duration::from_millis(1));
let ft3 = some_time_depended_function();
assert_eq!(ft2 < ft3);
}
// Time flows again.
let t2 = some_time_depended_function();
assert!(t1 < t2);
}
}
注意
此工具**不适用于**测试多线程操作。
测试代码和被测试代码必须在同一线程中运行,因为此工具使用线程局部变量来防止冻结效果传播到其他测试。
许可证
根据您的选择,许可协议为 Apache 许可证,版本 2.0 或 MIT 许可证。