|
|
|
@ -4,7 +4,7 @@
|
|
|
|
|
> <br>
|
|
|
|
|
> commit b9a473ff80e72ed9a77f97a80799b5aff25b594a
|
|
|
|
|
|
|
|
|
|
Rust 中的测试函数是用来验证非测试代码是否按照期望的方式运行的。测试函数体通常执行如下三种操作:
|
|
|
|
|
Rust 中的测试函数是用来验证非测试代码是否是按照期望的方式运行的。测试函数体通常执行如下三种操作:
|
|
|
|
|
|
|
|
|
|
1. 设置任何所需的数据或状态
|
|
|
|
|
2. 运行需要测试的代码
|
|
|
|
@ -18,7 +18,7 @@ Rust 中的测试函数是用来验证非测试代码是否按照期望的方式
|
|
|
|
|
|
|
|
|
|
第七章当使用 Cargo 新建一个库项目时,它会自动为我们生成一个测试模块和一个测试函数。这有助于我们开始编写测试,因为这样每次开始新项目时不必去查找测试函数的具体结构和语法了。当然你也可以额外增加任意多的测试函数以及测试模块!
|
|
|
|
|
|
|
|
|
|
我们会通过实验那些自动生成的测试模版而不是实际编写测试代码来探索测试如何工作的一些方面。接着,我们会写一些真正的测试,调用我们编写的代码并断言他们的行为的正确性。
|
|
|
|
|
在实际编写测试代码之前,让我们先通过尝试那些自动生成的测试模版来探索测试是如何工作的。接着,我们会写一些真正的测试,调用我们编写的代码并断言他们的行为的正确性。
|
|
|
|
|
|
|
|
|
|
让我们创建一个新的库项目 `adder`:
|
|
|
|
|
|
|
|
|
@ -304,7 +304,7 @@ Cargo 编译并运行了测试。在 `Compiling`、`Finished` 和 `Running` 这
|
|
|
|
|
|
|
|
|
|
### 将 `Result<T, E>` 用于测试
|
|
|
|
|
|
|
|
|
|
目前为止,我们编写的测试在失败时就会 panic。也可以使用 `Result<T, E>` 编写测试!这里是第一个例子采用了 Result:
|
|
|
|
|
目前为止,我们编写的测试在失败时都会 panic。我们也可以使用 `Result<T, E>` 编写测试!这是一个延伸自示例 11-1 的测试,使用 `Result<T, E>` 重写,并在失败时返回 `Err` 而非 panic:
|
|
|
|
|
|
|
|
|
|
```rust,noplayground
|
|
|
|
|
{{#rustdoc_include ../listings/ch11-writing-automated-tests/no-listing-10-result-in-tests/src/lib.rs}}
|
|
|
|
@ -316,7 +316,7 @@ Cargo 编译并运行了测试。在 `Compiling`、`Finished` 和 `Running` 这
|
|
|
|
|
|
|
|
|
|
不能对这些使用 `Result<T, E>` 的测试使用 `#[should_panic]` 注解。为了断言一个操作返回 `Err` 成员,**不要**使用对 `Result<T, E>` 值使用问号表达式(`?`)。而是使用 `assert!(value.is_err())`。
|
|
|
|
|
|
|
|
|
|
现在你知道了几种编写测试的方法,让我们看看运行测试时会发生什么,和可以用于 `cargo test` 的不同选项。
|
|
|
|
|
现在你知道了几种编写测试的方法,让我们看看运行测试时会发生什么,以及可以用于 `cargo test` 的不同选项。
|
|
|
|
|
|
|
|
|
|
[concatenation-with-the--operator-or-the-format-macro]:
|
|
|
|
|
ch08-02-strings.html#使用--运算符或-format-宏拼接字符串
|
|
|
|
|