0%

目前来看, hello程序只存在于target/debug。 但是,如果我把它拷贝到环境变量PATH的任意一个目录里的话, 我就能成功运行测试了。不过,我并不想这么干, 我只想在当前的crate里进行测试。可以使用assert_cmd 这个crate, 它可以在当前的crate目录下找到对应的程序。
首先要做的就是把它加入到Cargo.tomldevelopment dependency 里。这将告诉Cargo,要加入的这个crate只在测试和性能测试(benchmarking)时使用。

Cargo.toml

1
2
3
4
5
6
7
8
9
[package]
name = "hello"
version = "0.1.0"
edition = "2018"

[dependencies]

[dev-dependencies]
assert_cmd = "1"

现在我就可以新建一个Command, 它会去Cargo的二进制目录里找。 下面的测试先不验证程序数据是否正确,先看看能不能成功。更新一下代码吧:

1
2
3
4
5
6
7
8
9
10
use assert_cmd::Command; // 用来导入assert_cmd::Command

#[test]
fn runs() {
// 新建一个Command运行当前crate里的hello程序
// 返回一个Result值,我假设可以被成功的Result::unwrap,因为可以找到hello程序。
let mut cmd = Command::cargo_bin("hello").unwrap();
// 断言程序被成功执行
cmd.assert().success();
}

有关于Result,它的内容很多, 现在暂时只需要知道它里面的值可能是成功:Ok,也可能是失败:Err。

测试的种类

我特别要给你们看一下如何进行测试.虽然代码很简单,但是也有一些需要验证的工作.主要有两大类测试,一个是从内向外的,我会写一些测试验证程序的内部功能. 另一个是从外向内的,我会写测试模仿用户使用程序.
前面一种称为单元测试(unit tests), 之后我们再讨论这种测试.
这个程序我想主要进行后一种测试,它被称为集成测试或者整合测试(integration test), 它把程序当成一个整体进行测试.

阅读全文 »

使用cargo新建项目并运行

首先进入到开发目录中,

1
2
$ cargo new hello
Created binary (application) `hello` package

应该能在目录中看到以下内容了

1
2
3
4
5
6
$ cd hello
$ tree
.
├── Cargo.toml
└── src
└── main.rs
阅读全文 »

Rust里有很多的特殊符号, 其中有的还有多种用途.
这里总结了一些符号的用法, 有可能有不全, 随时补充吧.

()

单元类型, 一种特殊的唯一类型,
大部分使用在返回值, 可以省略, 相当于Java 方法里的返回void;

阅读全文 »

前言

JDK8提供了Optional类,但是很多小伙伴都不知道有什么作用,感觉跟直接用null也没什么区别。那么今天咱们就谈一谈Optional有什么用,还有我为什么推荐你们使用Optional。

阅读全文 »

这是一篇国外的 帖子的翻译。顺便强化一下自己的记忆。

前言

有不少的同学在学 Rust 的过程中被 Rust 的 字符串相关 (&strString) 内容噎的够呛。字符串的相关内容,确实是除了Rust 的所有权外,另一个让人望而生畏的知识点。

阅读全文 »

前言

Svelte

Svelte是一个令我非常惊喜的前端框架,他的作者是Rollup作者Rich Harris。和React,Vue等框架不同,它基本仅是个编译器,基本没有运行期,它没有使用vdom,所以它自称速度非常的快,效率特别好。

阅读全文 »