我正在为一个函数写一个测试用例,这个函数返回一个包含枚举的元组。我想验证返回的元组是否与我所期望的匹配。在Rust中如何比较由枚举组成的元组?以下代码无法编译:
enum Test { Foo, Bar } assert_eq!((1, Test::Foo), (1, Test::Foo));
(Of当然,其中一个元组是由一个方法在运行时生成的。)
jtw3ybtb1#
元组已经实现了PartialEq和Debug(如果它们的所有元素都实现了的话),但是对于自定义枚举,您缺少Debug和PartialEq的实现:
PartialEq
Debug
#[derive(Debug, PartialEq)] enum Test { Foo, Bar }
这样,您期望的assert_eq!((1, Test::Foo), (1, Test::Foo));就可以工作了。如果你不能实现任何一个trait,你可以使用matches!(<value>, <pattern>):
assert_eq!((1, Test::Foo), (1, Test::Foo));
matches!(<value>, <pattern>)
let got = (1, Test::Foo); // calculate your result assert!(matches!(got, (1, Test::Foo)))
注意,第二个参数<pattern>必须是pattern,因此必须在编译时已知(您对函数的调用需要作为第一个参数传递)。
<pattern>
1条答案
按热度按时间jtw3ybtb1#
元组已经实现了
PartialEq
和Debug
(如果它们的所有元素都实现了的话),但是对于自定义枚举,您缺少Debug
和PartialEq
的实现:这样,您期望的
assert_eq!((1, Test::Foo), (1, Test::Foo));
就可以工作了。如果你不能实现任何一个trait,你可以使用
matches!(<value>, <pattern>)
:注意,第二个参数
<pattern>
必须是pattern,因此必须在编译时已知(您对函数的调用需要作为第一个参数传递)。