Shuttle 是一个用于测试并发 Rust 代码的库
tokio 和 rand)以及来自 std::sync 的同步原语和来自 std::collections 的集合更加容易。有关如何使用这些封装器的详细信息,请参阅 封装器/README.md。这里存在明显的竞态条件:如果已生成的线程在断言之前运行,则断言将失败。但是编写能够发现这种执行的单元测试是很棘手的。我们可以多次运行测试,并尝试通过找到失败的执行来"取得幸运",但这不是一个非常可靠的测试方法。即使测试失败了,也很难进行调试:我们无法在调试器中轻松捕获失败,而且每次我们做出更改时,都需要多次运行测试来确定是否解决了问题。
Shuttle 避免了这个问题,通过控制程序中每个线程的调度,并随机调度这些线程。通过控制调度,Shuttle 允许我们确定性地重现失败的测试。通过使用随机调度,结合适当的启发式算法,Shuttle 仍然可以捕获大多数(非对抗性)的并发错误,尽管它不是一个详尽的检查器。
暂无开放 Issues,或尚未同步最近议题。