首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

跟着谷歌安卓团队学习Rust-软件质量的保证单元测试入门

跟着谷歌安卓团队学习Rust-软件质量的保证单元测试入门

大家好,我是梦兽编程。欢迎回来与梦兽编程一起刷Rust的系列。

这是由 Google 的 Android开发团队的分享Rust课程。本课程涵盖了 Rust 的方方面面,从基本语法到泛型和错误处理等高级主题。

该课程的最新版本可以在 https://google.github.io/comprehensive-rust/[1]找到。如果您正在其他地方阅读,请检查那里的更新。

如果你喜欢看梦兽编程的版本可以订阅跟着谷歌安卓团队学Rust订阅最新内容,梦兽编程也期待大家关注我的个人网站。

加入梦兽编程微信群,公众号回复111即可加入交流群与梦兽进行交流。

单元测试

单元测试是确保代码质量的关键步骤,它可以早期发现和修复错误,提高代码的可靠性。单元测试有助于理解代码的功能,简化集成过程,减少回归问题,增强团队信心,并帮助遵守开发规范。通过自动化单元测试,可以更有效地进行持续集成和部署,提高软件开发效率。

可见单元测是我们软件开发过程中非常重要的一个环节,Rust作为一门现代编程语言。单元测试已经包含在内,不需要和js、java这一来语言需要额外安装和配置。

与其他语言相比,Rust提供的单元测试方式相对较全。可分为单元测试,集成测试,还有文档测试。

单元测试

一个庞大的系统是有很多代码块行为组合的,我们想让其他部分的代码按照期望的行为正常运作时候。可是使用(test)函数测试我们的代码,然后通过断言(assert)的方式判断结构是不是我们预期的答案。

大多数的单元测试都会放在tests模块中,还记得我们之前学习的文件模块?你也可以放在tests文件夹中。

这些模块都需要带上#[cfg(test)]的注解,模块的参数方法属性需要添加#[test]。

我们来看一个例子

fnfirst_word(text: &str) -> &str {

matchtext.find(' ') {

Some(idx) => &text[..idx],

None=> &text,

}

}

#[cfg(test)]

modtests {

usesuper::*;

#[test]

fntest_empty() {

// 断言是否相等

assert_eq!(first_word(""), "");

}

#[test]

fntest_single_word() {

// 断言是否相等

assert_eq!(first_word("Hello"), "Hello");

}

#[test]

fntest_multiple_words() {

// 断言是否相等

assert_eq!(first_word("Hello World"), "Hello");

}

}

可以使用 cargo test 来运行测试。

如果出现不是预期结果,会出现failures的结果。这个时候你可以直接在单元测上进行修改即可,无需重新重新跑整个应用人工尝试这段逻辑修改后会不会出现问题。

集成测试 (Integration Tests)

如果你想要作为客户端来测试你的(lin文件夹)库,可以使用集成测试。你需要在tests/目录下创建一个.rs文件。

例如,如果你的库有一个init函数,你可以创建一个名为my_library.rs的文件,在其中使用init函数,并使用#[test]属性来标记测试函数。这些测试只能访问你的crate的公共API

// tests/my_library.rs

usemy_library::init;

#[test]

fntest_init() {

assert!(init().is_ok());

}

文档测试

文档测试这个概念非常新奇,也是非常好用。他可以在你写文档的时候编写你的测试代码,在开发的改成中阅读文档是可以看到你是如何使用这个方法,大大提高开发体验。

你可以在///注释中的代码块自动被视为Rust代码。这些代码将在cargo test期间编译和执行。

例如,你可以有一个用于缩短字符串的函数shorten_string,并在其文档中包含测试代码。这些测试代码在文档中是不可见的,但如果添加了#符号,则仍会编译和运行。

/// Shortens a string to the given length.

///

/// ```

/// # use playground::shorten_string;

/// assert_eq!(shorten_string("Hello World", 5), "Hello");

/// assert_eq!(shorten_string("Hello World", 20), "Hello World");

/// ```

pubfnshorten_string(s: &str, length: usize) -> &str {

&s[..std::cmp::min(length, s.len())]

}

Rust Docs test

感谢阅读本文,希望您对Rust的单元测试有了更深入的了解。作为软件质量保证的重要环节,单元测试有助于确保代码的可靠性,减少bug,提高开发效率。Rust内置了完善的单元测试支持,让您可以方便地编写各类测试,包括单元测试、集成测试和文档测试。建议在开发过程中充分利用这些测试机制,编写测试代码,以确保软件质量。

如果您觉得本文对您有帮助,欢迎关注我的公众号/网站,我会持续分享更多Rust学习和开发经验。同时,也欢迎加入我的微信群,一起交流Rust编程,共同进步。

如果您有任何问题或建议,欢迎留言反馈。您的支持是我持续进步的动力。我会认真对待每一条留言,努力提供更高质量的内容。再次感谢您的阅读,希望本文能对您的Rust学习之旅有所帮助。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OrQYoKkQ-KpHtB3T2A4ea5YA0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券