Picotest является оберткой над rstest
, которая позволяет запускать кластер Picodata с помощью pike
для запуска тестов
Установите следующие инструменты:
Чтобы использовать его, добавьте в свой Cargo.toml
файл:
[dev-dependencies]
rstest = "0.23.0"
picotest = { git = "https://github.com/picodata/pike.git", branch = "plugin_test_framework" }
Макрос #[picotest]
может быть применим как к функциям, так и к модулям
для функции:
use picotest::picotest;
use rstest::rstest;
#[picotest]
fn test_foo_bar() {
assert_eq!("foo bar", "foo bar");
}
для модуля:
use picotest::picotest;
#[picotest]
mod test_mod {
fn test_foo() {
assert_eq!("foo", "foo");
}
fn test_bar() {
assert_eq!("bar", "bar");
}
}
Запустите тесты с использованием переменной RUST_TEST_THREADS=1:
RUST_TEST_THREADS=1 cargo test
наличие переменной RUST_TEST_THREADS=1
необходимо только в том случае, если вы используете несколько модулей или функций с макросом #[picotest]
При исполльзовании макроса на функциях, picotest
будет создавать кластер при каждом запуске очередного теста и удалять кластер по завершению теста
При использовании макроса на модуле, picotest
автоматически пометит все фукнции которые начинаются с test_
как rstest
функции, кластер будет создан только 1 раз и удален по завершению всех тестов в модуле
picotest
является оберткой над rstest
, поэтому поддерживает использование fixture
use picotest::picotest;
#[picotest]
mod test_mod {
#[fixture]
fn foo() -> String {
"foo".to_string()
}
#[fixture]
fn bar() -> String {
"bar".to_string()
}
fn test_foo(foo: String) {
assert_eq!(foo, "foo".to_string());
}
fn test_bar(bar: String) {
assert_eq!(bar, "bar".to_string());
}
fn test_foo_bar(foo: String, bar: String) {
assert_ne!(foo, bar);
}
}
Макрос #[picotest]
поддерживает следующие аргументы:
- path - путь до дирректории плагина
- timeout - выждать timeout прежде чем запустить тест
Picotest поддерживает работу с хуками before_all
и after_all
Для использования добавьте в свой Cargo.toml
файл:
[dev-dependencies]
test-env-helpers = "0.2.2"
Пример:
use picotest::picotest;
use test_env_helpers::{after_all, before_all};
#[picotest]
#[before_all]
#[after_all]
mod test_mod {
fn before_all() {
todo!()
}
fn after_all() {
todo!()
}
#[fixture]
fn foo() -> String {
"foo".to_string()
}
#[fixture]
fn bar() -> String {
"bar".to_string()
}
fn test_foo(foo: String) {
assert_eq!(foo, "foo".to_string());
}
fn test_bar(bar: String) {
assert_eq!(bar, "bar".to_string());
}
fn test_foo_bar(foo: String, bar: String) {
assert_ne!(foo, bar);
}
}
Picotest позволяет создавать / удалять кластер без использования макроса #[picotest]
use rstest::rstest;
#[rstest]
fn test_without_picotest_macro() {
let cluster = picotest::run_cluster(".", 0);
assert!(cluster.is_ok());
assert!(cluster.is_ok_and(|cluster| cluster.path == "."))
}