做动图为所欲为的网站,广告制作公司电话,阜阳网页,h5页面制作结论和心得前些天发现了一个巨牛的人工智能学习网站#xff0c;通俗易懂#xff0c;风趣幽默#xff0c;忍不住分享一下给大家。点击跳转到网站。
存在的问题
有时候#xff0c;不同单元测试之间可能会竞争相同的资源#xff0c;比如读写相同的文件。在这种情况下#xff0c;如果…前些天发现了一个巨牛的人工智能学习网站通俗易懂风趣幽默忍不住分享一下给大家。点击跳转到网站。
存在的问题
有时候不同单元测试之间可能会竞争相同的资源比如读写相同的文件。在这种情况下如果并行执行测试就会导致有竞态问题。
默认情况下rust 采用多线程并行执行所有测试当有串行需要时可以执行cargo test – --test-threads{thread_numbers}来控制执行测试的线程数。
另外一种解决办法serial_test
除了运行测试的时候指定线程数之外我们也可以使用 serial_test 这个 crate。
使用方式
编辑 Cargo.toml 编辑 dependencies 块
[dependencies]
serial_test 3.1.1代码中使用
然后我们就可以在单元测试中使用了
#[cfg(test)]
mod tests {use std::env::temp_dir;use super::*;use serial_test::serial;#[test]#[serial(frpc)]fn test_create_proxy_from_json() {let s String::from({\name\:\test\,\type\:\tcp\,\localIP\:\127.0.0.1\,\localPort\:80,\remotePort\:80});let proxy: Proxy serde_json::from_str(s).unwrap();assert_eq!(proxy.name, Some(test.to_string()));assert_eq!(proxy.proxy_type, Some(tcp.to_string()));assert_eq!(proxy.local_ip, Some(127.0.0.1.to_string()));assert_eq!(proxy.local_port, Some(80));assert_eq!(proxy.remote_port, Some(80));}#[test]#[serial(frpc)]fn test_frpc() {let frpc_config create_frpc_config();assert_eq!(frpc_config.frpc.server_addr, Some(1.2.3.4.to_string()));assert_eq!(frpc_config.frpc.server_port, Some(7000));let toml frpc_config.to_toml();assert_eq!(true, toml.contains([[proxies]]))}
}这样一来上面这两个单元测试就不会同时执行了从而避免了一些竞态场景的发生。
参考文档
关于 serial_test 的更多内容可查看 https://docs.rs/serial_test/3.1.1/serial_test/index.html