各言語の xUnit 比較
概念とファイル/フォルダ/マッチ関数
| 言語 | xUnit | テストスイート | テストケース | マッチ関数 | 引数の順番 |
|---|---|---|---|---|---|
| C++ | GoogleTest | TEST() 第1引数 | TEST() 第2引数 | EXPECT_EQ() | e, a |
| Go | testing | ファイル名 *_test.go | 関数名 Test*() | t.Fatalf() | - |
| Python | pytest | ファイル名 test_*.py | 関数名 test_*() | assert | - |
| Python | unittest | クラス *Test | 関数名 test_*() | assertEqual() | e, a |
| Rust | (built-in) | ルールなし | 関数名 制約なし + #[test] | assert_eq!() | 規定なし |
| Swift | Testing | struct名 制約なし + @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)で書くことにしようと思う
以下広告