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

在测试/test.rs文件中无法识别在src/main.rs中定义的类型

在测试/test.rs文件中无法识别在src/main.rs中定义的类型,这是因为测试文件和主文件是分开编译的,测试文件无法直接访问主文件中的私有类型和函数。为了解决这个问题,可以在主文件中使用pub关键字将需要在测试文件中使用的类型和函数标记为公共的,以便测试文件可以访问到它们。

另外,还可以使用模块的方式来组织代码,将需要在测试文件中使用的类型和函数放在一个公共的模块中,并在测试文件中引入该模块。这样测试文件就可以访问到主文件中定义的类型和函数了。

举例来说,假设在src/main.rs中定义了一个名为MyType的类型,我们想在测试文件中使用它。可以按照以下步骤进行操作:

  1. 在src/main.rs中将MyType标记为公共的,可以使用pub关键字:pub struct MyType { ... }
  2. 在src/main.rs中将需要在测试文件中使用的函数标记为公共的,同样使用pub关键字:pub fn my_function() { ... }
  3. 在测试文件test.rs中引入主文件中的模块:use crate::main::*;。这里的main是指src/main.rs文件所在的模块。
  4. 现在就可以在测试文件test.rs中使用主文件中定义的类型和函数了,例如:let my_type = MyType::new();

需要注意的是,测试文件和主文件需要在同一个包(crate)中,即它们应该在同一个目录下,并且在同一个包的根目录下有一个名为lib.rsmain.rs的文件作为入口文件。

推荐的腾讯云相关产品:腾讯云函数(云原生无服务器计算服务),详情请参考腾讯云函数产品介绍。腾讯云函数提供了无服务器的计算能力,可以方便地进行函数级别的测试和部署。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

python接口测试:在一个用例文件中调用另一个用例文件中定义的方法

简单说明 在进行接口测试时,经常会遇到不同接口间传递参数的情况,即一个接口的某个参数需要取另一个接口的返回值; 在平常写脚本过程中,我经常会在同一个py文件中,把相关接口的调用方法都写好,这样在同一个文件中能够很方便的进行调用...; 后来随着功能增多,在写其他py文件时,有时也会先调用某个相同的接口来获取参数; 如果在每个py文件中都写一遍调用某个接口的方法,会显得很啰嗦,也不好维护,并且以后万一提供数据的那个接口发生变化...,需要调整很多地方; 所以,当我们在一个用例py文件中写好某个接口调用方法,后续如果在其他py文件中也要用到这个接口的返回值,则直接引用先前py文件中定义好的接口调用方法即可。...): """创建活动-测试用例""" def setUp(self): ……………… 一些必要的初始化工作,例如读取配置文件、调用其他方法等...id,这个id就是由test_A.py文件中CreateActivity类下的 push_file_download 方法生成的; 所以这里要先调用push_file_download方法,对应第

2.9K40

Rust模块系统

当我们使用 cargo new 创建一个包的时候会发现,Cargo 创建的 Cargo.toml 文件中并没有提到 src/main.rs,这是因为 Cargo 遵循一个约定: src...通过使用模块,我们可以将相关的定义分组到一起,并指出他们为什么相关。 3.2 模块树 前面提到,src/main.rs 和 src/lib.rs 叫做 crate root。...front_of_house 模块移动到属于它自己的文件 src/front_of_house.rs 中: 改变 crate 根文件 src/lib.rs 或 src/main.rs,通过声明 front_of_house...目录和一个包含 hosting 模块定义的 src/front_of_house/hosting.rs 文件: pub fn add_to_waitlist() {} 【注】Rust 中的私有性规则不但应用于模块...如果我们在一个结构体定义的前面使用了 pub,这个结构体会变成公有的,但是这个结构体的字段仍然是私有的。如果要将字段公有化,则还需要分别在字段前使用 pub 关键字。

46330
  • 听GPT 讲Rust源代码--srctools(18)

    :表示标记的唯一标识符,用于在标记树中引用特定标记。它是公共(pub)的结构体,但省略了其余的定义,因此无法提供更多详细信息。 SyntaxContext(pub, ...)...在rust-analyzer的xtask中,main.rs文件定义了主要的入口函数,负责处理命令行参数和调度任务。它启动并管理各个子任务,包括编译、运行测试、格式化代码等。...除了任务的调度,main.rs文件还负责加载并执行各个子任务的代码。每个子任务对应一个单独的Rust源代码文件,如compile.rs、fmt.rs和test.rs等,这些文件实现了具体的功能逻辑。...File: rust/src/tools/tier-check/src/main.rs 在Rust源代码的rust/src/tools/tier-check/src/main.rs文件中,主要实现了一个名为...其中最重要的是"Tier"结构体,它用于表示Rust编译层级的信息,包括层级的名称、编译测试的状态、编译测试的说明等。 定义函数:在文件中,定义了一些用于处理编译层级的函数。

    15710

    听GPT 讲Rust源代码--srctools(19)

    具体来说,main.rs文件首先会根据预定义的Windows头文件中的宏定义和函数原型生成对应的Rust代码表示。.../unicode/src/main.rs中的main.rs文件的作用是运行Unicode相关的基准测试。...总体来说,main.rs文件的作用是通过运行一系列性能测试来评估Rust语言对Unicode字符的处理性能。它生成包含不同类型的字符序列的测试用例,并针对这些测试用例执行一系列字符串操作的性能测试。...在 slice_get_unchecked 模块中的 main.rs 文件中,首先导入了一些必要的库和模块。然后,定义了一个测试函数 bench_slice_get_unchecked。...例如,这个 trait 定义了 dynamic_drop 方法,用于在回收过程中调用类型的析构函数。 总之,tag_gc.rs 文件中实现了 Miri 工具中的垃圾回收功能。

    16910

    听GPT 讲Rust源代码--srctools(40)

    总结起来,rust/src/tools/jsondocck/src/main.rs文件中的Command结构体和CommandKind枚举定义了工具执行的命令及其类型,而main函数则定义了工具的入口逻辑...此外,在lib.rs文件中还包含了一些测试用例,用于验证解码函数的正确性和稳定性。...File: rust/src/tools/x/src/main.rs 在Rust源代码中,rust/src/tools/x/src/main.rs文件的作用是定义x工具的入口函数。...另外,FileHash 枚举类型表示文件的哈希类型,它有以下几个变体: Sha256:SHA-256哈希 Custom:自定义的哈希 这些枚举类型用于描述文件哈希值的类型,以及在清单中与文件相关的信息。...File: rust/src/tools/build-manifest/src/main.rs 在Rust源代码中,rust/src/tools/build-manifest/src/main.rs这个文件的作用是生成构建清单

    21210

    听GPT 讲Rust Cargo源代码(2)

    File: cargo/crates/mdman/src/main.rs 在Rust Cargo的源代码中,cargo/crates/mdman/src/main.rs这个文件的作用是实现了一个用于管理...File: cargo/benches/capture/src/main.rs cargo/benches/capture/src/main.rs 是 Rust Cargo 中的一个文件,其作用是实现对测试功能的捕获方法进行基准测试...在 Cargo 项目中,基准测试是一种用于衡量代码性能和吞吐量的特殊类型的测试。在这个文件中,我们可以定义一个或多个基准测试,并使用捕获方法来捕获和测量这些基准测试的性能。...这些报告可以帮助我们更好地理解基准测试的性能结果。 综上所述,cargo/benches/capture/src/main.rs 的作用是定义和实现捕获方法来进行基准测试。...File: cargo/src/bin/cargo/main.rs 在Rust的构建工具Cargo的源代码中,cargo/src/bin/cargo/main.rs文件是整个Cargo命令行工具的入口点

    10910

    听GPT 讲Rust源代码--srcbootstrap

    Unknown:表示未知的C编译器。当无法确定使用的C编译器时,将使用该值。 在cc_detect.rs文件中,通过一系列的逻辑和算法来检测C编译器。...定义常量: main.rs定义了一些用于配置编译器的常量,例如文件名、Rustc命令行参数等。 定义子命令: 通过使用clap库,main.rs定义了一些子命令,这些子命令用于控制编译器的不同行为。...由于无法直接查看你引用的具体Rust源代码,因此无法给出准确的回答。但是根据命名的规范来看,name可能是某个库或工具的名称,Src可能是源码库的相关配置或操作的结构。...Target包含了目标的类型(如二进制文件还是库文件)、源码文件路径、编译选项等信息。 这些结构体在metadata.rs文件中定义,用于表示Rust编译器在编译、构建和输出过程中的相关信息。...它负责在分布式测试中运行测试,并处理相关的网络通信。 Rustdoc: 这个结构体定义了文档生成工具。它负责将Rust代码中的文档注释提取出来,并生成可阅读的文档页面。

    46670

    【Rust】007-包管理与模块管理

    我们可以看一下my_project文件夹里的内容: my_project ├── Cargo.toml └── src └── main.rs 其中src/main.rs中的main函数为整个程序的入口...如果想要初始化一个库类型的项目,供其他使用方使用(例如发布到 crates.io 上),在初始化的时候需要运行 cargo init --lib 它会在src文件夹下新建一个lib.rs的文件作为整个库的入口...这个文件类似src/main.rs或者src/lib.rs,该文件(mod.rs)控制该文件夹下所有其他文件模块的引入。...your_project/ ├── src/ │ ├── main.rs │ └── fruit.rs fruit.rs 定义 pub mod apple { pub fn eat_apple...说明 新版本的改进:在较新的 Rust 版本中,你可以将 fruit.rs 模块的子模块放在一个同名的目录中,即 fruit/ 目录。

    9200

    【Rust学习】01_入门

    env:Path在 Linux 和 macOS 中,使用:$ echo $PATH如果这一切都是正确的,并且 Rust 仍然无法正常工作,那么您可以提交issue或者到Rust 社区寻求帮助。...运行 rustup doc 以在浏览器中打开本地文档。 每当标准库提供类型或函数时,您不确定它的作用或如何使用它,请使用应用程序编程接口 (API) 文档来了解!Hello, World!...您将看到 Cargo 为我们生成了两个文件和一个目录:一个 Cargo.toml 文件和一个包含 main.rs 文件的 src 目录。...到目前为止,我们的项目和 Cargo 生成的项目之间的区别在于,Cargo 将代码放在了 src 目录下,而我们在顶部目录下有一个 Cargo.toml 配置文件。...如果要对代码的运行时间进行基准测试,请确保使用目标/版本中的可执行文件运行 cargo build --release 和基准测试。

    12000

    Rust中的代码组织:packagecratemod

    main2.rs 在src里,再加2个文件lib.rs及main2.rs,内容如下: lib.rs pub fn foo(){ println!...从最后2行的输出来看,运行的是main.rs中的方法,即:main2.rs中的main函数,并未识别成入口,继续折腾,在src下创建目录bin,然后把main.rs以及main2.rs都移动到bin目录...a,然后里面还嵌套了模块b 然后在main方法里,尝试调用a模块的方法,以及其子模块b中的方法 编译一下,会发现各种报错: ---------------------------------------...可以先记一条规则 :如果模块x与main方法在一个.rs文件中,且x处于最外层,main方法可以调用x中的方法。...(); crate::a::b::foo_b(); 是等效的,就好比,文件d:\a\b\1.txt,如果我们当前已经在d:\根目录下, a\b\1.txt d:\a\b\1.txt .

    1.6K10

    编写rust测试程序

    在 Rust 中,单元测试的惯例是将测试代码的模块跟待测试的正常代码放入同一个文件中,例如 src/lib.rs 文件中有如下代码: pub fn add_two(a: i32) -> i32 {...例如: cargo test --test integration_test 二进制包的集成测试 目前来说,Rust 只支持对 lib 类型的包进行集成测试,对于二进制包例如 src/main.rs 是无能为力的...原因在于,我们无法在其它包中使用 use 引入二进制包,而只有 lib 类型的包才能被引入,例如 src/lib.rs。...这就是为何我们需要将代码逻辑从 src/main.rs 剥离出去放入 lib 包中,例如很多 Rust 项目中都同时有 src/main.rs 和 src/lib.rs ,前者中只保留代码的主体脉络部分...这样,我们就可以对 lib 包中的具体实现进行集成测试,由于 main.rs 中的主体脉络足够简单,当集成测试通过时,意味着 main.rs 中相应的调用代码也将正常运行。

    1.3K20

    Rust错误处理

    在rust中,触发不可恢复错误使用panic即可。 触发panic可以分为被动触发和主动调用两种方式。 被动触发 下面是一个被动触发panic的例子。...=1` environment variable to display a backtrace 它告诉我们,main 函数所在的线程崩溃了,发生的代码位置是 src/main.rs 中的第 8 行第 5...Result枚举类型 它被定义为如下: enum Result { Ok(T), Err(E), } 泛型参数 T 代表成功时存入的正确值的类型,存放方式是 Ok(T),E..., error) }, }; } 代码很清晰,对打开文件后的 Result 类型进行匹配取值,如果是成功,则将 Ok(file) 中存放的的文件句柄 file 赋值给...标准库中定义的 From 特征,该特征有一个方法 from,用于把一个类型转成另外一个类型,? 可以自动调用该方法,然后进行隐式类型转换。

    70520

    Rust中使用模块组织代码

    在今天,通过 Github 或中心化的代码分发网站,我们可以轻松的在一个软件工程中同时引入世界各地的开发者开发的代码,我们与同事在同一个工程目录下并行开发不同的程序功能,或者在不拷贝代码的前提下将一个工程中的代码在另一个工程中复用...默认情况下,src/main.rs 是与 Package 同名的二进制 Crate 的入口文件,因此我们可以说我们现在有一个 my-project Package 以及一个二进制 my-project...如果我们的 src 目录中同时包含 main.rs 和 lib.rs,那么我们将在这个 Package 中同时得到一个二进制 Crate 和一个库 Crate,这在开发一些基础库时非常有用,例如你使用...("{}", mod1::CrateEnum::Item as u32); } ---- 结构体的可见性 结构体中的字段和方法默认是私有的,通过加上 pub 修饰语可使得结构体中的字段和方法可以在定义结构体的模块之外被访问...("{}", mod1::MESSAGE); } 将模块映射到文件夹 当一个文件夹中包含 mod.rs 文件时,该文件夹可以被作为一个模块: src ├── main.rs └── mod1 └

    57810

    【Rust学习】13_package 和 crate

    这些功能有时统称为模块系统,包括:Packages:一个 Cargo 功能,可让您构建、测试和共享 crateCrates:生成库或可执行文件的模块树Modules:用于控制作用域和路径的私有性Paths...crate 可以包含模块,并且这些模块可以使用 crate 编译的其他文件中定义,正如我们将在接下来的部分中看到的那样。crate 可以有两种形式:二进制 crate 或库 crate。...二进制 crate 是可以编译为可运行的可执行文件的程序,例如命令行程序或服务器。每个 API 都必须有一个名为 main 的函数,该函数定义可执行文件运行时发生的情况。...在项目目录中,有一个 Cargo.toml 文件,为我们提供了一个包。还有一个包含 main.rs 的 src 目录。在文本编辑器中打开 Cargo.toml,请注意没有提到 src/main.rs。...通过将文件放在 src/bin 目录中,一个包可以有多个二进制 crate:每个文件将是一个单独的二进制 crate。

    8610
    领券