#notifier #backtrace #ifttt #notifications #test #rust

nightly test-notifier

一个结构体,你可以将其放在测试的最顶部,以输出一些关于哪个测试结束、何时结束以及其他一些信息

2 个版本

0.1.1 2023 年 2 月 3 日
0.1.0 2023 年 2 月 3 日

#3 in #ifttt

MIT/Apache

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