#cdylib #projects #linker #dynamically #items #exported #testing

test-cdylib

用于从测试代码动态链接到 cdylib 项目的库

2 个稳定版本

1.1.0 2020 年 4 月 29 日
1.0.0 2020 年 1 月 24 日

#1034文件系统

Download history 732/week @ 2024-03-16 448/week @ 2024-03-23 558/week @ 2024-03-30 485/week @ 2024-04-06 880/week @ 2024-04-13 623/week @ 2024-04-20 784/week @ 2024-04-27 1207/week @ 2024-05-04 795/week @ 2024-05-11 706/week @ 2024-05-18 783/week @ 2024-05-25 1329/week @ 2024-06-01 1597/week @ 2024-06-08 911/week @ 2024-06-15 1328/week @ 2024-06-22 593/week @ 2024-06-29

4,774 每月下载量
3 个 Crates 使用

MIT/Apache

29KB
656

test-cdylib

CI Latest Version Rust Documentation Rustc Version 1.31+

test-cdylib 是一个库,允许从测试代码动态链接到 cdylib 项目。这允许测试导出项的存在。

此库基于 dtolnay 的 TryBuild

测试 cdylib 项目

cdylib 项目可以像这样测试

#[test]
fn api_test() {
    let dylib_path = test_cdylib::build_current_project();

    // Or load the shared library using any other method of your choice.
    let dylib = dlopen::symbor::Library::open(&dylib_path).unwrap();

    // Test the api as necessary.
}

这将在项目尚未构建的情况下构建当前项目,并返回编译库的路径。

测试构建 cdylib 的库

旨在帮助创建 cdylib 接口的库可以通过两种方式测试。首先是通过链接到示例,例如:

#[test]
fn api_gen_test() {
    let dylib_path = test_cdylib::build_example("example");

    // Or load the shared library using any other method of your choice.
    let dylib = dlopen::symbor::Library::open(&dylib_path).unwrap();

    // Test the api as necessary.
}

这将会构建示例并返回编译库的路径。

第二种方式是将文件作为 cdylib 构建,例如:

#[test]
fn api_gen_test() {
    let dylib_path = test_cdylib::build_path("tests/cdylib/api_test.rs");

    // Or load the shared library using any other method of your choice.
    let dylib = dlopen::symbor::Library::open(&dylib_path).unwrap();

    // Test the api as necessary.
}

这将会将指定的文件构建为 cdylib 项目,并返回编译库的路径。所有依赖项和开发依赖项都是可用的。请注意,这将导致所有依赖项被重新构建,这可能会显著减慢测试速度。

多个测试使用相同的库

可以通过使用 once_cell 来包含库的路径来使多个测试链接到同一个库,例如:

use once_cell::sync::Lazy;
use std::path::PathBuf;
static LIB_PATH: Lazy<PathBuf> = Lazy::new(|| test_cdylib::build_current_project());

可以对 build_examplebuild_path 都这样做。

许可证

根据您的选择,在 Apache 许可证版本 2.0 或 MIT 许可证下授权。

除非您明确声明,否则您有意提交给包含在此 crate 中并由您定义的 Apache-2.0 许可证的所有贡献,将按上述方式双重许可,没有任何附加条款或条件。

依赖项

~1–1.8MB
~39K SLoC