Skip to content
On this page

测试4:exercises/tests/tests4.rs

题目

rust
// tests4.rs
//
// Make sure that we're testing for the correct conditions!
//
// Execute `rustlings hint tests4` or use the `hint` watch subcommand for a
// hint.

// I AM NOT DONE

struct Rectangle {
    width: i32,
    height: i32
}

impl Rectangle {
    // Only change the test functions themselves
    pub fn new(width: i32, height: i32) -> Self {
        if width <= 0 || height <= 0 {
            panic!("Rectangle width and height cannot be negative!")
        }
        Rectangle {width, height}
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn correct_width_and_height() {
        // This test should check if the rectangle is the size that we pass into its constructor
        let rect = Rectangle::new(10, 20);
        assert_eq!(???, 10); // check width
        assert_eq!(???, 20); // check height
    }

    #[test]
    fn negative_width() {
        // This test should check if program panics when we try to create rectangle with negative width
        let _rect = Rectangle::new(-10, 10);
    }

    #[test]
    fn negative_height() {
        // This test should check if program panics when we try to create rectangle with negative height
        let _rect = Rectangle::new(10, -10);
    }
}

请确保我们的测试条件正确。

题目解析

题目中定义了长方形结构体Rectangle,并定义了new方法,要求widthheight必须是正数,否则会直接panic。

我们先来看第一个单元测试,用于测试长方形的宽度和高度是否正确:

rust
#[test]
    fn correct_width_and_height() {
        // This test should check if the rectangle is the size that we pass into its constructor
        let rect = Rectangle::new(10, 20);
        assert_eq!(???, 10); // check width 
        assert_eq!(rect.width, 10); // check width 
        assert_eq!(???, 20); // check height  
        assert_eq!(rect.height, 20); // check height 
    }

接着看第二个单元测试,由于宽度是复数,这里应该会panic,为了能够让测试通过,我们可以使用#[should_panic]

rust
#[test]
    #[should_panic]  
    fn negative_width() {
        // This test should check if program panics when we try to create rectangle with negative width
        let _rect = Rectangle::new(-10, 10);
    }

同理,第三个单元测试高度是复数,也会panic,我们也需要添加#[should_panic]

rust
#[test]
    #[should_panic] 
    fn negative_height() {
        // This test should check if program panics when we try to create rectangle with negative height
        let _rect = Rectangle::new(10, -10);
    }

参考资料

Powered by VitePress