2 个版本
0.1.1 | 2023 年 2 月 3 日 |
---|---|
0.1.0 | 2023 年 2 月 3 日 |
#3 in #ifttt
9KB
93 行
test-notifier
我在 Banyan 的工作中有一些非常耗时的测试,并且我希望每当它们完成时,我的手机都能收到一条描述性的通知。我也不想被迫添加傻傻的打印语句来表示我们在哪个测试中。这暴露了一个结构体 TestNotifier
,你只需在测试的开始处初始化它。当测试完成时,它将向你的手机发送通知,如果测试崩溃,它也会发送通知。以下是如何在你的代码中使用它(KEY 是你从 IFTTT 获取的,你需要自己弄清楚如何导入它。我把我的放在环境变量中,然后使用 lazy_static 来获取它... 看看 lib.rs 中的测试。你可以做任何你想做的事情。)
#[test]
fn test_yay_yahoo() {
// create a test notifier
let mut tn = TestNotifier::new(KEY);
// set a message (you can do this multiple times... eventually i'll add something that can append to the message)
// this helps you smuggle more data out to your notification
tn.set_message("hello".to_string());
// fail the test (or pass the test. testnotifier doesn't care)
assert!(false); // or true, whatever
// around here, you'll get an IFTTT notification or whatever you configured.
// it'll contain "test_yay_yahoo" and the cratepath that you're testing and "hello"
// maybe you could make your bedroom lights change color depending on whether it passed.
// have alexa read you the message, including the function's address in memory
// doing this will deeply impress the women in your life and not scare them. you should explain vtables to her as well, in great detail. srs.
}
现在设置你的 IFTTT 小工具,将通知发送到你的手机或其他设备:以下是我所做的事情 https://docs.rs/nustify/latest/nustify/
它是如何工作的?
当 TestNotifier 被丢弃时,它会查看自己的回溯,解引用符号,并查找其自身的 drop 的调用者,以确定它所在的测试。然后它向 ifttt 发送通知,这样你就可以知道测试完成了,无论你在哪里。
如果你的代码中做了其他 vtable/stack-smashing 犯罪,它可能不会工作。我不知道。我不在乎。如果你那么做了,你就已经取消了此包的保修... 回溯和 rustc-demangle 包的限制是你自己的问题。
为什么要这样做?
DRY(不要重复自己)是好的。我不想在我的测试中添加打印语句来表示我在哪个测试中。我可以在任何地方找到它们完成的时间。这就像值班但更糟糕。
忏悔录
我在这个中做了一些恶心的事情:例如,nustify 是异步的,但我的测试不是。所以我启动了一个完整的 tokio 运行时来运行它。 whatever works lol
依赖关系
~8–20MB
~316K SLoC