如何正确地在Rust测试中Assert不合格?

atmip9wb  于 2023-11-19  发布在  其他
关注(0)|答案(2)|浏览(110)

我正在为我的项目编写一些Rust测试,并希望确保我的MongoStorage结构能够成功运行。
下面是我在Rust中的测试代码:

#[test]
fn creates_storage_successfully() {
  let storage = MongoStorage::new();
  if Some(storage).is_some()  {
    println!("Database connection established successfully");
  } else {
    eprintln!("Failed to establish a database connection");
  }
}

字符串
但是它看起来很冗长,而且没有使用assert函数。我相信在一行中检查变量是否不是null会很棒。此外,我想使用适合测试的assert函数之一,而不是print语句。但是,我找不到类似的函数,如:

assert_ne!(storage, null)


也许我走错了方向,或者在Rust中有更方便的方法来检查此类情况?

pxq42qpu

pxq42qpu1#

Rust本身没有空值,但是看起来你的MongoStorage::new()返回了一个Option<T>类型,所以你的assert可能看起来像

assert_ne!(storage, None);

字符串
如果它没有返回Option<T>类型,它应该返回一个空的存储,所以也许你应该用一个类似is_empty()的函数来检查它是否为空。
另外,new()函数通常用于非故障函数,所以如果它可能失败,也许你应该使用另一个名称build()connect();如果它不能失败,我想测试它没有意义。

smdncfj3

smdncfj32#

MongoStorage::new()到底返回什么?在惯用的Rust中,如果一个函数被调用new(),它就不会失败。特别是因为Rust中没有null,所以你不需要Assert任何东西,所以也许你的测试是不必要的?
现在,我假设它实际上是沿着

let storage = MongoStorage::try_new(); // This returns a `Result<..., ...>`.

字符串
你需要检查storage是成功还是失败。
备选办法1:

assert!(storage.is_ok(), "Oh no, we failed to establish the connection");


备选案文2:

assert!(matches!(storage, Ok(_)), "Oh no, we failed to establish the connection");


备选方案3:

#[test]
fn creates_storage_successfully() {
  MongoStorage::try_new()
     .expect("Oh no, we failed to establish the connection");
}

相关问题