
Polish
Polish is a test frammework designed to allow the construction of test-driven development processes written in Rust.
Getting Started
Installing the Package
The crates.io package is kept up-to-date with all the major changes which means you can use it by simply including the following in your Cargo.toml under your dependencies section:
polish = "*"
But if you'd like to use nightly (most recent) releases, you can include the GitHub package repo instead:
polish = { git = "https://github.com/alkass/polish", branch = "master" }
Writing Test Cases
single Test Cases
The simplest test case can take the following form:
extern crate polish;
use polish::test_case::{TestRunner, TestCaseStatus, TestCase};
use polish::logger::Logger;
fn my_test_case(logger: &mut Logger) -> TestCaseStatus {
TestCaseStatus::PASSED }
fn main() {
let test_case = TestCase::new("Test Case Title", "Test Case Criteria", Box::new(my_test_case));
TestRunner::new(0).run_test(test_case);
}
This produces the following:
The example listed above is available here
You can also pass a Rust closure instead of a function pointer as so:
extern crate polish;
use polish::test_case::{TestRunner, TestCaseStatus, TestCase};
use polish::logger::Logger;
fn main() {
let test_case = TestCase::new("Test Case Title", "Test Case Criteria", Box::new(|logger: &mut Logger| -> TestCaseStatus {
TestCaseStatus::PASSED
}));
TestRunner::new(0).run_test(test_case);
}
The example listed above is available here
Multiple Test Cases
You can run multiple test cases as follows:
extern crate polish;
use polish::test_case::{TestRunner, TestCaseStatus, TestCase};
use polish::logger::Logger;
fn main() {
let mut runner = TestRunner::new(0);
runner.run_test(TestCase::new("1st Test Case Title", "Test Case Criteria", Box::new(|logger: &mut Logger| -> TestCaseStatus {
TestCaseStatus::PASSED
})));
runner.run_test(TestCase::new("2nd Test Case Title", "Test Case Criteria", Box::new(|logger: &mut Logger| -> TestCaseStatus {
TestCaseStatus::PASSED
})));
runner.run_test(TestCase::new("3rd Test Case Title", "Test Case Criteria", Box::new(|logger: &mut Logger| -> TestCaseStatus {
TestCaseStatus::PASSED
})));
}
But a more convenient way would be to pass a Vector of your test cases to run_tests as so:
extern crate polish;
use polish::test_case::{TestRunner, TestCaseStatus, TestCase};
use polish::logger::Logger;
fn main() {
let my_tests = vec![
TestCase::new("1st Test Case Title", "1st Test Case Criteria", Box::new(|logger: &mut Logger| -> TestCaseStatus {
TestCaseStatus::PASSED
})),
TestCase::new("2nd Test Case Title", "2nd Test Case Criteria", Box::new(|logger: &mut Logger| -> TestCaseStatus {
TestCaseStatus::UNKNOWN
})),
TestCase::new("3rd Test Case Title", "3rd Test Case Criteria", Box::new(|logger: &mut Logger| -> TestCaseStatus {
TestCaseStatus::FAILED
}))];
TestRunner::new(0).run_tests(my_tests);
}
Embedded Test Cases
...
Attributes
...
Logging
The logger object that's passed to each test case offers 4 logging functions (pass, fail, warn, and info). Each of these functions take a message argument of type String which allows you to use the format! macro to format your logs, e.g.:
logger.info(format!("{} + {} = {sum}", 1, 2, sum=(1 + 2)));
Author
Fadi Hanna Al-Kass