gpt4 book ai didi

unit-testing - 当 PartialEq 的实现不合适时,如何断言两个变量相等?

转载 作者:行者123 更新时间:2023-12-03 11:32:07 25 4
gpt4 key购买 nike

在我的程序中,我用以下结构表示“事件”:

struct Event {
value: &'static str,
timestamp: usize,
}

到目前为止,我使用 PartialEq 来比较 Event 变量:大多数时候,我认为两个 Event 是相等的,如果它们是一样的:

impl PartialEq for Event {
fn eq(&self, other: &Self) -> bool {
self.value == other.value
}
}

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

#[test]
fn test_loose_equality() {
let a = Event { value: "a-value", timestamp: 12345 };
let b = Event { value: "a-value", timestamp: 23456 };

assert_eq!(a, b);
}
}

但是,在某些测试中,我想确保两个这样的变量是“严格相等”的:测试应该失败,它们具有不同的 timestamp(对于 而言是不同的) Eq).

根据 assert_eq! 的文档:

Asserts that two expressions are equal to each other (using PartialEq). source

所以,我正在寻找一个 Eq 等价物,一个 assert_Eq_eq! 排序。

(或者我误解了 Eq 的工作原理以及应该如何使用?)

这是我未能完成的:

impl Eq for Event {}

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

#[test]
fn test_strict_equality() {
let a = Event { value: "a-value", timestamp: 12345 };
let b = Event { value: "a-value", timestamp: 12345 };

// ???
}
}

最佳答案

你逆流而上游。顺其自然。设 PartialEq 为严格相等,并为松散相等定义一个单独的特征或方法。

#[derive(Eq, PartialEq)]
struct Event { .. }

impl Event {
fn loose_eq(&self, other: &Self) -> bool {
self.value == other.value
}
}
#[test]
fn test_loose_equality() {
let a = Event { value: "a-value", timestamp: 12345 };
let b = Event { value: "a-value", timestamp: 23456 };

assert!(a.loose_eq(b));
}

关于unit-testing - 当 PartialEq 的实现不合适时,如何断言两个变量相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61619631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com