1. ホーム
  2. unit-testing

[解決済み] パニックが発生したことを確認するRustのユニットテストはどのように書けばよいですか?

2023-01-08 17:27:08

質問

以下のようなRust関数があります。 panic を実行するRust関数があり、その関数がパニックになっているかどうかを検証するためのテストケースを書きたいと思っています。というテストケースしか見つかりませんでした。 assert!assert_eq! というマクロがあります。これをテストするための何らかのメカニズムがあるのでしょうか?

新しいタスクを生成して、そのタスクがパニックになるかどうかをチェックすることができました。それは意味があるのでしょうか?


を返すと Result<T, E> を返すのは、私の場合、適切ではありません。

のサポートを追加したいのですが Add をサポートしたい。 Matrix 型に追加することができます。このような追加のための理想的な構文は、次のようになります。

let m = m1 + m2 + m3;

ここで m1 , m2 , m3 は全て行列である。したがって、結果型である addMatrix . 以下のようなものは、あまりに不可解でしょう。

let m = ((m1 + m2).unwrap() + m3).unwrap()

同時に add() 関数は、追加される2つの行列が同じ次元であることを検証する必要があります。したがって add() は次元が一致しない場合にパニックを起こす必要があります。 利用可能なオプションは panic!() .

どのように解決するのですか?

答えは テスト のセクションにあります。より具体的には、あなたは #[should_panic] という属性があります。

#[test]
#[should_panic]
fn test_invalid_matrices_multiplication() {
    let m1 = Matrix::new(3, 4);  // assume these are dimensions
    let m2 = Matrix::new(5, 6);
    m1 * m2
}