Rust 模拟 `std::process::Child` 进行测试?

问题描述 投票:0回答:1

我有一个应用程序会生成一个长时间运行的

Child
进程。我想测试应用程序的逻辑,而子结构并不是真正需要的,我已经研究了几个模拟框架,例如mockall或faux。但真的不明白如何模拟一个简单的外部结构?非常感谢任何帮助。

testing rust mocking
1个回答
0
投票

无法完全取代

std::process::Command
std::process::Child
的行为。但是,有一种方法可以改变实际发生的情况 - 更改执行的命令!

  1. 修改您的代码,以便可以通过某种方式配置(“依赖项注入”)子进程的路径。 (这在非测试场景中也可能有用!)
  2. 创建文件
    src/bin/test-child.rs
    ,其
    main()
    函数具有您希望测试子级具有的任何行为。
  3. 在您的测试代码中(必须位于
    tests/
    中,“集成测试”,而不是在应用程序代码中),传递
    env!("CARGO_BIN_EXE_test-child")
    作为被测试代码应生成的程序的路径。 (此环境变量由 Cargo 自动设置。

采用这种方法,而不是进程内模拟,意味着您的测试可以更加真实;它不会调用可能与

std
略有不同的模拟,但实际上启动了一个真正的过程。打包/部署应用程序时,所需的配置也可能很有用,因为它允许遵守有关子程序必须存储位置的要求,或在运行时选择不同的版本。

© www.soinside.com 2019 - 2024. All rights reserved.