【09】属性注解 & 断言 & 自动化测试

文章目录

  • 属性注解
    • 条件编译`#[cfg(target_os = "linux")]`
    • 派生宏 `#[derive(...)]`
    • 禁用标准库`#![no_std]`
    • 禁用警告:`#[allow(...)]` 或 `#![allow(...)]`
    • 标机测试`#[test]`
    • 内联优化`#[inline]`
    • 内存布局控制`#[repr(...)]`
    • 过程宏标记`#[proc_macro]`
    • 自定义属性宏
  • 断言
    • 检查panic
    • 调试断言宏
    • 自定义断言宏
  • 自动化测试
    • 运行测试
      • 结果
    • 常用方法
      • 属性注解条件编译、测试+ 断言
      • 使用result
    • 指定忽略
  • 测试类型
    • 单元测试
    • 集成测试

属性注解

  1. 外部属性:附加在代码项之前,用 #[…] 表示。
  2. 内部属性:作用于整个模块或 crate,用 #![…] 表示,通常放在文件顶部。

条件编译#[cfg(target_os = "linux")]

// 目标平台编译
#[cfg(target_os = "linux")]
// 特性开关
#[cfg(feature = "logging")]
// 组合条件
#[cfg(all(target_arch = "x86_64", target_os = "windows"))]
// 条件编译test
#[cfg(test)]

派生宏 #[derive(...)]

自动为结构体或枚举实现 Trait。

#[derive(Debug, Clone, PartialEq)]

禁用标准库#![no_std]

用于嵌入式或无操作系统的场景,禁用 Rust 标准库。

#![no_std]  // 必须放在文件顶部

禁用警告:#[allow(...)]#![allow(...)]

#[allow(dead_code)]  // 忽略未使用代码的警告

标机测试#[test]

#[test]

内联优化#[inline]

#[inline(always)]  // 强制内联

内存布局控制#[repr(...)]

指定数据的内存布局,常用于 FFI 或硬件交互。

#[repr(C)]  // 兼容 C 语言布局
struct Data {
   
    a: u32,
    b: f64,
}

#[repr(packed)]  // 无内存对齐
struct PackedData {
   
    byte: u8,
    int: u32,
}

过程宏标记#[proc_macro]

定义过程宏(需在独立的宏 crate 中使用)。

use proc_macro::TokenStream;

#[proc_macro]
pub fn my_macro(input: TokenStream) -> TokenSt

你可能感兴趣的:(RUST,rust,开发语言)