Skip to main content

各言語の xUnit 比較

概念とファイル/フォルダ/マッチ関数

言語xUnitテストスイートテストケースマッチ関数引数の順番
C++GoogleTestTEST() 第1引数TEST() 第2引数EXPECT_EQ()e, a
Gotestingファイル名 *_test.go関数名 Test*()t.Fatalf()-
Pythonpytestファイル名 test_*.py関数名 test_*()assert-
Pythonunittestクラス *Test関数名 test_*()assertEqual()e, a
Rust(built-in)ルールなし関数名 制約なし + #[test]assert_eq!()規定なし
SwiftTestingstruct名 制約なし + @Suite関数名 制約なし + @Test#expect-

という感じなので、
自分の運用では、どの言語でも、以下のようにまとめておけば同じような粒度に良さそうだ

  • 1 テストケース = 1 関数。ただし名前の衝突に注意
  • 1 ファイル = 1 テストスイート。またはテスト対象のクラス単位
  • 1 カテゴリ = 1フォルダ

expected, actual の順

  • 期待する値 = expected = e
  • 動作させた結果 = actual = a

と呼ぶとして、

  • JUnit 方式が assertEquals(e, a) と決まっているので、
  • assert で書くときは assert a == e と書くのが自然そう

→ 引数 1 つで == 判定するときは a == e、引数 2 つになっていたときだけ (e, a) で書く、と覚えておこう

※ 気になること:

  • Rust の assert_eq!()(e, a) にすべきか?と思うがシグニチャ見ると (left, right) としか書かれてないし、プロジェクトテンプレートのサンプルは (a, e) になっている。
  • あまり使う機会もないかもしれないが、他と違うと混乱するので (e, a) で書くことにしようと思う

以下広告