编写参数化测试

参数化测试是用不同的输入值多次运行的测试。当你想用一系列不同的输入测试一个函数, 或用一系列不同的预期输出测试一个函数时,这非常有用。Sui 的单元测试尚不支持原生的参数化测试。 要实现这一点,我们需要编写一些样板代码,以使用不同的输入值多次运行相同的测试。

#[test]
fun test_add() {
    assert_eq!(add(1, 2), 3);
    assert_eq!(add(2, 2), 4);
    assert_eq!(add(3, 2), 5);
}

可以重写为:

#[test]
fun test_add() {
    let test_cases = vector[(1, 2, 3), (2, 2, 4), (3, 2, 5)];
    let i = 0;
    while (i < vector::length(test_cases)) {
        assert_eq!(add(a, b), expected);
        i = i + 1;
    }
}

随着 Move 即将引入宏函数,这将变得更加容易。

#[test]
fun test_add() {
    let test_cases = vector[(1, 2, 3), (2, 2, 4), (3, 2, 5)];
    vector::for_each(test_cases, |test_case| {
        let (a, b, expected) = test_case;
        assert_eq!(add(a, b), expected);
    }
}