Assertions
assert!
struct Rectangle {
width : u32 ,
height : u32 ,
}
impl Rectangle {
pub fn can_hold ( & self , other : & Rectangle ) -> bool {
self . width > other . width && self . height > other . height
}
}
pub struct Guess {
value : i32 ,
}
#[cfg(test)]
mod tests {
use super ::* ;
#[test]
fn larger_can_hold_smaller () {
let larger = Rectangle {
width : 8 ,
height : 7 ,
};
let smaller = Rectangle {
width : 5 ,
height : 1 ,
};
assert! (larger . can_hold ( & smaller))
}
#[test]
fn smaller_cannot_hold_larger () {
let larger = Rectangle {
width : 8 ,
height : 7 ,
};
let smaller = Rectangle {
width : 5 ,
height : 1 ,
};
assert! ( ! smaller . can_hold ( & larger))
}
}
asserteq!
#[cfg(test)]
mod tests {
#[test]
fn it_works () {
assert_eq! ( 2 + 2 , 4 );
}
}
Results
Contains
pub fn greeting (name : & str ) -> String {
format! ( "Hello {}!" , name)
}
#[cfg(test)]
mod tests {
use super ::* ;
#[test]
fn greeting_contains_name () {
let result = greeting ( "Carrol" );
assert! (
result . contains ( "Carrol" ),
"Greeting did not countain name, value was `{}`" ,
result
)
}
}
Annotations
shouldpanic
pub struct Guess {
value : i32 ,
}
impl Guess {
pub fn new (value : i32 ) -> Guess {
if value < 1 {
panic! (
"Guess value must be greater than or equal to 1, got {}." ,
value
);
} else if value > 100 {
panic! (
"Guess value must be less than or equal to 100, got {}." ,
value
);
}
Guess { value }
}
}
#[cfg(test)]
mod tests {
use super ::* ;
#[test]
#[should_panic(expected = "Guess value must be less than or equal to 100" )]
fn greater_than_100 () {
Guess :: new ( 200 );
}
}
ignore
This ignores tests unless specifically requested:
#[test]
#[ignore]
fn expensive_test () {
// code that takes an hour to run
}
fn main () {}
Integreation Tests
Integration tests are their own thing and I’m too lazy to take notes now
as it’s 18:59 on a Friday. See relevant chapter in the
book
for more information.
Using Result <T, E> in Tests
This is possible for when you want to use the question mark
operator
in your tests:
#[cfg(test)]
mod tests {
use super ::* ;
#[test]
fn it_works () -> Result <(), String > {
if 2 + 2 == 4 {
Ok (())
} else {
Err ( String :: from ( "two plus two does not equal four" ))
}
}
}