11个重大版本
0.18.0 | 2023年8月26日 |
---|---|
0.17.0 | 2023年2月11日 |
0.16.0 | 2022年10月22日 |
0.15.0 | 2022年1月20日 |
0.1.0 | 2018年5月1日 |
1272在GUI中
344每月下载量
在 3 crates中使用
30KB
311 行
gtk-test
此项目允许您测试GTK应用程序的UI。它必须与gtk-rs库一起使用。
它是如何工作的?
实际上非常简单(尽管在OSX上要执行一些额外操作才能按预期工作……)
gtk::init().unwrap(); // You need to init GTK otherwise it'll just crash...
然后像平时一样构建您的UI(使用Glade
或手动)。唯一真正改变的是:您必须不要调用gtk::main
!
构建完UI后,只需调用gtk_test
宏/函数来测试它。但有一点需要注意:有时,您需要为GTK处理某些事件留出时间。例如,如果您点击了一个按钮并且与之关联了动作,则更谨慎地使用gtk_test::wait
。
另一个推荐的做法是,如果您需要与之交互(例如,点击按钮或输入一些文本),请将焦点放在窗口上。
let w = gtk::Window::new();
// ...
w.activate_focus();
一般设置
在运行测试时,您需要指定只想要一个线程。为此
cargo test -- --test-threads=1
否则,GTK上下文可能会相互冲突。
针对OSX的特定设置
在OSX上还需要做一些操作才能使其工作。首先,您无法将#[test]
属性添加到您的函数中,它不起作用。相反,您必须像编写常规二进制文件一样编写您的测试(因此以main
函数作为入口点)。
一个简短的示例(完整版本可以在本存储库的tests
文件夹中找到)
fn main() {
let (w, l, b) = init_ui();
assert_text!(l, "Test");
w.activate_focus();
gtk_test::click(&b);
gtk_test::wait(1000); // to be sure that GTK has updated the label's text
assert_text!(l, "Clicked");
}
然后您需要在您的Cargo.toml
文件中添加以下内容
[[test]]
harness = false # This is the important line!
name = "basic"
这允许您的测试作为“常规”二进制文件运行。
示例?
您可以在测试文件夹中找到一些。只需复制粘贴即可,然后就可以使用了(别忘了在您的 Cargo.toml
文件中添加缺失的部分!)。
在持续集成(CI)中使用它吗?
实际上是可以的(仅测试了GitHub Actions)。您只需要一个显示服务器。以下是在您的CI配置文件中添加以使其工作的内容
安装以下软件包
- libgtk-3-dev
- libxdo-dev
然后使用 xvfb-action 在虚拟显示环境中运行应用程序。例如
- name: Run headless test
uses: GabrielBB/xvfb-action@v1
with:
run: cargo test -- --test-threads=1
查看我们的 .github/workflows/linux_ci.yml
文件,了解我们是如何设置的。
依赖项
~18MB
~411K SLoC