Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
CSDN 技术社区
skill_tree_rust
提交
ec2b9b36
S
skill_tree_rust
项目概览
CSDN 技术社区
/
skill_tree_rust
通知
32
Star
7
Fork
3
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
2
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
skill_tree_rust
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
2
Issue
2
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
ec2b9b36
编写于
9月 20, 2022
作者:
J
jackymao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
complete unit_test.md
上级
eaf7ec88
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
217 addition
and
27 deletion
+217
-27
data/1.rust初阶/4.测试/1.单元测试/config.json
data/1.rust初阶/4.测试/1.单元测试/config.json
+1
-1
data/1.rust初阶/4.测试/1.单元测试/unit_test.md
data/1.rust初阶/4.测试/1.单元测试/unit_test.md
+0
-25
data/1.rust初阶/4.测试/1.单元测试/unit_tests.json
data/1.rust初阶/4.测试/1.单元测试/unit_tests.json
+2
-1
data/1.rust初阶/4.测试/1.单元测试/unit_tests.md
data/1.rust初阶/4.测试/1.单元测试/unit_tests.md
+197
-0
data/1.rust初阶/4.测试/3.集成测试/integration_tests.json
data/1.rust初阶/4.测试/3.集成测试/integration_tests.json
+8
-0
data/1.rust初阶/4.测试/3.集成测试/integration_tests.md
data/1.rust初阶/4.测试/3.集成测试/integration_tests.md
+9
-0
未找到文件。
data/1.rust初阶/4.测试/1.单元测试/config.json
浏览文件 @
ec2b9b36
...
@@ -3,7 +3,7 @@
...
@@ -3,7 +3,7 @@
"keywords"
:
[],
"keywords"
:
[],
"children"
:
[],
"children"
:
[],
"export"
:
[
"export"
:
[
"unit_test.json"
"unit_test
s
.json"
],
],
"keywords_must"
:
[],
"keywords_must"
:
[],
"keywords_forbid"
:
[]
"keywords_forbid"
:
[]
...
...
data/1.rust初阶/4.测试/1.单元测试/unit_test.md
已删除
100644 → 0
浏览文件 @
eaf7ec88
# 单元测试
除了使用 println!() 或 dbg!() 打印出值这种方法之外,rust 还支持更完善的测试代码写法,而且可以先写测试代码,再实现对应的功能,以实现 TDD (Test-Driven Development)。
单元测试是为了测试我们所写的每一个单元的代码(函数),确保这个单元能完成我们需要的功能,避免所有可能的用法中出现错误。
当你使用 cargo new demo_unit_test --lib 新建一个库的时候,在生成的 src/lib.rs 文件里面会自动出现一个测试样例,提醒你为你的库写好测试。
```
rust
#[cfg(test)]
mod
tests
{
#[test]
fn
it_works
()
{
let
result
=
2
+
2
;
assert_eq!
(
result
,
4
);
}
}
```
这里已经包含了一个测试的基本元素。你可以使用 cargo test 来运行这个测试,也是用这个命令来运行所有的后续测试。
data/1.rust初阶/4.测试/1.单元测试/unit_test.json
→
data/1.rust初阶/4.测试/1.单元测试/unit_test
s
.json
浏览文件 @
ec2b9b36
{
{
"type"
:
"code_options"
,
"type"
:
"code_options"
,
"author"
:
"jackymao_com"
,
"author"
:
"jackymao_com"
,
"source"
:
"unit_test.md"
,
"source"
:
"unit_test
s
.md"
,
"notebook_enable"
:
false
,
"notebook_enable"
:
false
,
"exercise_id"
:
""
"exercise_id"
:
""
}
}
\ No newline at end of file
data/1.rust初阶/4.测试/1.单元测试/unit_tests.md
0 → 100644
浏览文件 @
ec2b9b36
# 单元测试
除了使用 println!() 或 dbg!() 打印出值这种方法之外,rust 还支持更完善的测试代码写法,而且可以先写测试代码,再实现对应的功能,以实现 TDD (Test-Driven Development)。
单元测试是为了测试我们所写的每一个单元的代码(函数),确保这个单元能完成我们需要的功能,避免所有可能的用法中出现错误。
当你使用 cargo new demo_unit_test --lib 新建一个库的时候,在生成的 src/lib.rs 文件里面会自动出现一个测试样例,提醒你为你的库写好测试。
```
rust
#[cfg(test)]
mod
tests
{
#[test]
fn
it_works
()
{
let
result
=
2
+
2
;
assert_eq!
(
result
,
4
);
}
}
```
这里已经包含了一个测试的基本元素。你可以使用 cargo test 来运行这个测试,也是用这个命令来运行所有的后续单元测试。
以下单元测试代码能正常运行的是:
## 答案
A
###
A
```
rust
pub
fn
add
(
a
:
i32
,
b
:
i32
)
->
i32
{
a
+
b
}
pub
fn
add_two
(
a
:
i32
)
->
i32
{
internal_adder
(
a
,
2
)
}
fn
internal_adder
(
a
:
i32
,
b
:
i32
)
->
i32
{
a
+
b
}
#[cfg(test)]
mod
tests
{
#[test]
fn
it_works
()
{
let
result
=
2
+
2
;
assert_eq!
(
result
,
4
);
}
use
super
::
*
;
#[test]
fn
test_add
()
{
assert_eq!
(
add
(
1
,
2
),
3
);
}
#[test]
fn
internal
()
{
assert_eq!
(
4
,
internal_adder
(
2
,
2
));
}
#[test]
#[ignore]
fn
ignored_test
()
{
assert_eq!
(
add
(
0
,
0
),
0
);
}
}
```
### 即使 ignore 的测试也要能正常编译,否则报错
B
```
rust
pub
fn
add
(
a
:
i32
,
b
:
i32
)
->
i32
{
a
+
b
}
pub
fn
add_two
(
a
:
i32
)
->
i32
{
internal_adder
(
a
,
2
)
}
fn
internal_adder
(
a
:
i32
,
b
:
i32
)
->
i32
{
a
+
b
}
#[cfg(test)]
mod
tests
{
#[test]
fn
it_works
()
{
let
result
=
2
+
2
;
assert_eq!
(
result
,
4
);
}
use
super
::
*
;
#[test]
fn
test_add
()
{
assert_eq!
(
add
(
1
,
2
),
3
);
}
#[test]
fn
internal
()
{
assert_eq!
(
4
,
internal_adder
(
2
,
2
));
}
#[test]
#[ignore]
fn
ignored_test
()
{
assert_eq!
(
add
(
0.0
,
0.0
),
0.0
);
}
}
```
### 测试代码中需要使用 use super::*; 引入需要进行测试函数
C
```
rust
pub
fn
add
(
a
:
i32
,
b
:
i32
)
->
i32
{
a
+
b
}
pub
fn
add_two
(
a
:
i32
)
->
i32
{
internal_adder
(
a
,
2
)
}
fn
internal_adder
(
a
:
i32
,
b
:
i32
)
->
i32
{
a
+
b
}
#[cfg(test)]
mod
tests
{
#[test]
fn
it_works
()
{
let
result
=
2
+
2
;
assert_eq!
(
result
,
4
);
}
#[test]
fn
test_add
()
{
assert_eq!
(
add
(
1
,
2
),
3
);
}
#[test]
fn
internal
()
{
assert_eq!
(
4
,
internal_adder
(
2
,
2
));
}
#[test]
#[ignore]
fn
ignored_test
()
{
assert_eq!
(
add
(
0
,
0
),
0
);
}
}
```
###
D
```
rust
#[cfg(test)]
mod
tests
{
#[test]
fn
it_works
()
{
let
result
=
2
+
2
;
assert_ne
(
result
,
4
);
}
}
```
\ No newline at end of file
data/1.rust初阶/4.测试/3.集成测试/integration_tests.json
0 → 100644
浏览文件 @
ec2b9b36
{
"type"
:
"code_options"
,
"author"
:
"jackymao_com"
,
"source"
:
"integration_tests.md"
,
"notebook_enable"
:
false
,
"exercise_id"
:
""
}
\ No newline at end of file
data/1.rust初阶/4.测试/3.集成测试/integration_tests.md
0 → 100644
浏览文件 @
ec2b9b36
# 集成测试
在 Rust,集成测试是位于你的库外面的,一般会专门建立一个 tests 目录, 用于测试和确保当别人从外部调用你的库时工作正常。测试代码对库的使用与别人调用你的库时的用法一样,所以集成测试时只能调用库的对外暴露的函数。
集成测试只对库 crate 进行测试,不能对二进制 crate 测试。也就是说,一般是对 src/lib.rs 内的对外函数进行测试,而不会对 src/main.rs 里面的函数进行集成测试。
一般的做法是,将所有的功能性函数都写在库 (lib.rs 及关联模块) 里面,而在 main.rs 只进行简略的引入及使用。这样可以使用集成测试覆盖所有的可对外的函数。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录