1 个不稳定版本
0.1.0 | 2023 年 10 月 19 日 |
---|
#703 in 测试
27KB
312 行
kubernetes-mock-rs
模拟 Kubernetes 客户端,用于测试与 Kubernetes API 交互的内容,包括 控制器。
运行 make doc
查看文档、示例等。(发布后将链接到 docs.rs!)
488 行代码,但其中有 24% 是文档注释。
功能
- 非常简单易用,只需像程序应做的那样调用相同的 API
- 设置错误容易,文档详尽 - 如果有问题,它应该能帮助你解决
- 测试失败时详细错误,显示确切错误
- 支持多个 Kubernetes 版本(目前为 v1.25,v1.21) - 要更改版本,请使用功能
v1_25
或v1_21
。- 默认为 v1.25,如果您想使用不同的版本,请记得在您的 Cargo.toml 中使用
default-features = false
- 默认为 v1.25,如果您想使用不同的版本,请记得在您的 Cargo.toml 中使用
示例
最小可编译示例
use kubernetes_mock::*;
use kube::{Api, api::ListParams};
use k8s_openapi::api::core::v1::Node;
#[tokio::main]
async fn main() {
let (client, mut mocker) = make_mocker();
let api: Api<Node> = Api::all(client);
mocker.expect(|| async {
let nodes = api.list(&ListParams::default()).await;
},
MockReturn::List(&[Node::default()]),
).await.unwrap();
// ...
let handle = tokio::spawn(mocker.run());
api.list(&ListParams::default()).await;
handle.await.unwrap().unwrap(); // Assert tests pass with `unwrap()`.
// Requires two calls to unwrap - one for tokio spawn result, the other for the mocker result
}
注意:unwrap()
对于格式化来说并不理想,如果您想看到格式化的错误,可以这样做
if let Err(e) = handle.await.unwrap() { // still need one unwrap() for tokio spawn
panic!("{e:#?}"); // debug pretty-print
}
待办事项
- 测试
mocker.watch()
- 它工作,但没有经过测试。- 我们可以使用控制器来测试这一点,以展示它是如何工作的。
- 测试更多边缘情况 - 传递给
expect()
的函数崩溃,等等。 - 探索更好的 API 设计?
- 我们能否让
expect()
执行多个API调用,意味着人们可以用一个来处理所有API调用
- 我们能否让
- 我们是否可以放宽限制(例如,无序API调用,允许同一个调用多次/“多次”,允许不同的参数)?
欢迎提供帮助,查看 CONTRIBUTING.md!
Apache 2.0协议下分发。更多信息请见 LICENSE。
依赖项
~6–27MB
~370K SLoC