• 如果你运行cargo xtest,可能会看到test_println_output测试失败。 • 这是由测试和定时器处理程序之间的竞争条件导致的。测试程序是这样的. 测试将一个字符串打印到VGA缓冲区,然后通过在缓冲区字符数组buffer_chars上手动迭代来检查输出。出现竞争条件是因为定时器中断处理程序可能在println和读取屏幕字符之间运行。
#[derive(Debug)]structRectangle{width:u32,height:u32,}implRectangle{fncan_hold(&self,other:&Rectangle)->bool{self.width>other.width&&self.height>other.height}}#[cfg(test)]modtests{usesuper::*;#[test]fnlarger_can_hold_smaller(){letlarger=Rectangle{width:8,height:7,};letsmaller=Rectangle{...
test会捕获stdout的输出,stderr应该不受影响,可以使用eprintln 参考
这是因为Rust测试程序隐藏了成功测试的stdout,以使测试输出整洁。你可以通过将--nocapture选项传递给test...
$ cargo test -- --show-output 来试下例子 fn prints_and_returns_10(a: i32) -> i32 { println!("I got the value {}", a); 10 } #[cfg(test)] mod tests { use super::*; #[test] fn this_test_will_pass() { let value = prints_and_returns_10(4); assert_eq!(10, value)...
$ cargo test -- --test-threads=1 这里的--test-threads=1告诉测试程序以单线程执行所有测试。 显示测试函数中的输出 如果你希望在测试成功时也能看到println!等宏的输出内容,你可以使用以下命令: $ cargo test -- --show-output 运行特定的测试
Please try again. Here's the output: running 1 test test tests::you_can_assert ... FAILED ...
println!("{:p}, {:p}, {:p}", &tt.a, &tt.b.a, &tt.b.b); // 后面两个地址没变} 这里的结果说明了,当发生所有权转移时,到底什么被复制了一份。我并没有查阅到细致的资料,于是猜测,只有栈上的数据,或者指向堆上数据的栈上指针会被复制,除非显式地clone,否则不会发生堆上数据复制。
#[test] fn function_test() { let color = String::from("green"); let print = || println!("color: {}", color); // 这个闭包打印 `color`。它立即借用(通过引用,`&`)`color`并将该借用和闭包本身存储到print变量中。`color`会一直保持被借用状态知道`print`离开作用域 ...
cargotest-- --show-output 通过指定名字来运行部分测试# 可以向 cargo test 传递所希望运行的测试名称的参数来选择运行哪些测试,创建不同名称的三个测试: pubfnadd_two(a:i32)->i32{a +2}#[cfg(test)]modtests {usesuper::*;#[test]fnadd_two_and_two() {assert_eq!(4,add_two(2));}#[test]...