例如,我想在测试时使结构体
然而,这段代码无法编译。看起来Rust不支持在结构体定义内部使用
S
只有一个name_count
字段,这样我可以操作last_name
来验证测试中与name_count
相关的属性。pub struct S {
last_name: String,
#[cfg(test)] {
// This field only exists in tests
name_count: HashMap<String, i32>,
}
}
impl S {
fn record_last_name(&mut self, name: String) {
self.last_name = name;
if cfg!(test) {
// Increase self.name_count[self.last_name]
}
}
}
#[test]
fn test_last_name_count() {
let mut s = S {};
...
// assert some properties about name_count
}
然而,这段代码无法编译。看起来Rust不支持在结构体定义内部使用
#[cfg(test)]
,那么我该如何解决这个问题呢?
if cfg!()
,必须使用#[cfg()]
。 - Chayim Friedman#[cfg()]
放在语句上,而不必对整个函数进行门控。 - Chayim Friedmanmain
还是record_last_name
?我认为main
可能需要在函数上使用它,除非他们想要为两个配置都管理一个s
。我将其保留在实现块的函数范围内,只是为了避免对他们需要该方法执行的操作进行假设,但是,是的,这个可以放在表达式上。 - Jeremy Meadows