2个不稳定版本
0.2.0 | 2020年4月11日 |
---|---|
0.1.0 | 2020年4月10日 |
#769在 测试
每月下载54次
11KB
200 代码行
diviner
Diviner是Rust的FoundationDB风格模拟测试框架。它包括两部分
- 一个Future执行器,旨在设计为单线程和确定性。目标是在Rust中实现确定性模拟。
- 现有Rust异步IO库的包装器。在正常构建时,包装器将使用实际实现,但在启用
simulation
功能时,包装器将使用与上述Future执行器集成的模拟实现,以实现确定性测试。这里提到的包装器可能包括(但不仅限于)- 与时间相关的函数,例如sleep或now;
- 与网络相关的模块,例如TCPListener、TCPStream;
- 与文件IO相关的模块;
如果您对上述术语感到困惑,这个视频可能有助于解释Diviner提供了什么。
目标是使任何满足以下规则的Rust代码能够进行确定性测试
- 代码使用async/await风格编写;
- 代码使用Diviner提供的包装器执行所有必要的IO;
示例
为了说明库的功能,在存储库中提供了几个示例
- simple:使用async/await风格编写的最小代码片段;
- time-manipulation:时间操作示例,在这里我们正在测试整天的睡眠,但模拟代码会操纵时间并立即完成;
- execution-order:一个实现不佳的代理,Diviner可以使用不同的种子来测试不同执行顺序的future。因此,您可以使用触发错误的种子对代码进行确定性调试;
依赖项
~1.2–1.7MB
~28K SLoC