货物测试无法引用集成测试中定位板条箱内的任何公共内容。单元测试也找不到测试用例

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了货物测试无法引用集成测试中定位板条箱内的任何公共内容。单元测试也找不到测试用例相关的知识,希望对你有一定的参考价值。

我正在尝试在no_std模块上进行一些测试,但无法同时进行集成和单元测试。我认为这些货物无法使其他人看到功能和模块。

该项目位于:https://github.com/ShisoftResearch/Nulloc/tree/e2e15646da79651ddb8c29e0526bad0d60690bec

运行cargo test,我得到:

➜ cargo test
   Compiling nulloc v0.1.0 (/Users/shisoft/Dropbox/Code/OSS Projects/Nulloc)
error[E0432]: unresolved import `nulloc::bump_heap`
 --> tests/bump_heap.rs:3:14
  |
3 |  use nulloc::bump_heap::BumpAllocator;
  |              ^^^^^^^^^ could not find `bump_heap` in `nulloc`

error[E0432]: unresolved import `nulloc::bump_heap`
 --> tests/bump_heap.rs:3:14
  |
3 |  use nulloc::bump_heap::BumpAllocator;
  |              ^^^^^^^^^ could not find `bump_heap` in `nulloc`

error: aborting due to previous error

For more information about this error, try `rustc --explain E0432`.
error: aborting due to previous error

For more information about this error, try `rustc --explain E0432`.
error: could not compile `nulloc`.
warning: build failed, waiting for other jobs to finish...
error: could not compile `nulloc`.

To learn more, run the command again with --verbose.

但是我已经在tests.rs中测试了我要测试的板条箱,并且在bump_heap中将lib.rs标记为公共。

[当我尝试在bump_heap.rs中运行单元测试时,货物找不到测试用例。

我不确定这是怎么回事

答案

问题是,Rust的测试框架隐式使用内置的测试库,该库取决于标准库。这意味着我们不能为#[no_std]内核使用默认的测试框架。

Phillip Oppermann's blog

据我了解,您需要一个自定义框架。我的回答灵感来自引用的绅士博客。

  1. 注释或删除tests目录中的测试。

  2. 用下面的代码创建src/main.rs

#![feature(custom_test_frameworks)]
#![test_runner(crate::test_runner)]
extern crate nulloc;
//pub mod bump_heap;

fn main() {}

#[cfg(test)]
fn test_runner(tests: &[&dyn Fn()]) {
    println!("Running {} tests", tests.len());
    for test in tests {
        test();
    }
}

#[test_case]
fn fails() {
    assert_eq!(true, false);
}

仅供参考,因为存在编译器错误,所以我将pub mod bump_heap注释掉。

  1. 每晚使用运行测试。

如果您没有每晚安装生锈:

rustup install nightly

每晚进行测试:

rustup run nightly cargo test

单元和集成测试

如果您通读了该链接的博客,它将详细介绍如何进行集成测试以及如何进行。我想暂时可以只在main.rs中使用mod或出于组织目的。

mod integration {
    use super::*;

    #[test_case]
    fn works() {
        assert!(true);
    }   
}

mod bump_heap_unit {
    use super::bump_heap;

    #[test_case]
    fn works() {
        assert!(true);
    }   
}   

以上是关于货物测试无法引用集成测试中定位板条箱内的任何公共内容。单元测试也找不到测试用例的主要内容,如果未能解决你的问题,请参考以下文章

带货物和安装 Glassfish 的 Maven

在货物监控设备研发中,如何对单片机进行实时时钟配置?

货物监控设备研发过程中,如何实现GPS的数据转换?

java单元/集成测试中使用Testcontainers

java单元/集成测试中使用Testcontainers

无法集成测试 gradle 多模块 Spring-Boot-Application