假设我有一个名为
据我所知,有两种方法可以编写这些测试:
如果其中一项测试失败,Jest会准确地告诉您哪个测试失败了。而且实际的测试代码非常简洁易懂。
add
的Rust函数,它将两个数字相加。我想编写全面的单元测试来确保它始终正常工作。据我所知,有两种方法可以编写这些测试:
- 在一个测试函数中多次使用
assert_eq!
- 创建许多不同的函数,每个函数用于一组特定的输入/输出
使用多个断言
#[test]
fn test() {
assert_eq!(add(1, 2), 3);
assert_eq!(add(2, 4), 5);
assert_eq!(add(2, 3), 5);
}
一切正常时,这个方法非常有效。但是如果一个断言失败了,你就不知道哪一个失败了。比如在上面的测试中,你只会得到"left: 6, right: 5"这样的提示。是哪一个断言引起了这个错误呢?虽然add
很简单,容易找出问题,但对于非常规的情况,你就没有头绪了。
使用多个函数
#[test]
fn add_1_and_2() {
assert_eq!(add(1, 2), 3);
}
#[test]
fn add_2_and_4() {
assert_eq!(add(2, 4), 6);
}
这解决了使用多个断言的所有问题。然而,测试变得非常冗长,每个测试都需要创建一个唯一的函数名称。想象一下一个有4-5个不同参数的函数,并且您正在测试所有组合。那将是很多难以命名的函数!但至少你会知道哪个断言失败了。
JavaScript等价物
理想情况下,我正在寻找与使用Jest的此JavaScript测试具有相同功能的解决方案。
const tests = [[1, 2, 3], [2, 4, 6]];
it.each(tests)("adding %s and %s gives %s", ([a, b, result]) => {
expect(add(a, b)).toBe(result);
})
如果其中一项测试失败,Jest会准确地告诉您哪个测试失败了。而且实际的测试代码非常简洁易懂。