多くの場合、クラスは次のような構文で記述されたテストを使用してテストされます。これは、多数のテスト フレームワーク (たとえば、Ruby の Unit::Test; またはこの例のように MiniTest) によって提供されます。
class TestLolcat < MiniTest::Unit::TestCase
def setup
@lolcat = Lolcat.new
end
def test_that_lolcat_can_have_cheezburger
assert_equal true, @lolcat.i_can_has_cheezburger?
end
end
または、代わりに、重複するテスト フレームワークのセットによって提供される、2 番目の種類の構文で記述されたテストを使用します (たとえば、RSpec; またはこの例のように、再び MiniTest):
describe Lolcat do
before do
@lolcat = Lolcat.new
end
it "must be able to have cheezburger" do
@lolcat.i_can_has_cheezburger?.must_equal true
end
end
(おそらく、クラス メソッドと属性のテストにも適した他の構文ファミリが存在しますが、これらは私が興味を持っている 2 つです。)
私が知りたいのは、これら 2 つの構文ファミリのそれぞれの正しい名前は何ですか?
私が尋ねている理由について詳しく知りたい場合は、行の下を参照してください。
私がこの質問をしている理由は、Web を検索しても明確なコンセンサスが得られなかったからです。たとえば、MiniTest のドキュメントでは、上記の最初の構文を「単体テスト」構文、2 番目の構文を「仕様」構文と呼んでいます。対照的に、Michael Hartlは、 2 番目の種類の構文で記述されたクラス メソッドと属性のテストを「単体テスト」と説明しています。この構文で記述されたテストが、複数のクラスの相互作用から生じる高レベルの機能をテストする場合、彼はそれらを「統合テスト」と呼んでいます。
また、最初と2番目の種類の構文をそれぞれ"Test::Unit style"と"RSPec-esque"、または"TDD"構文と"BDD"構文として説明する人も見てきました。2 番目の種類の構文の他の名前には、 「'should'-like 構文」および「it構文」が含まれます。
私の理解 (Hartl が正しいことを漠然と示唆しています) は次のとおりです。
- TDDは練習であり、テスト構文ではありません。具体的には、通常、失敗するテスト (単体テストや統合テストなど) を作成し、テストに合格するようにコードを記述し、必要に応じてリファクタリングし、サイクルを再開するという慣行です。
- BDDもプラクティスですが、構文のテストに関する限定的な処方箋を作成します。具体的には、TDD に従いますが、テスト名の最初の単語として「should」を使用し、必要に応じてコンテキストを提供するためにテスト コードをネストするという方法です。
- 単体テストは練習であり、テスト構文ではありません。具体的には、コードの個々のユニット (クラス メソッドや属性など) をテストする方法
- 単体テストは、使用される構文に関係なく、単体テストの過程で記述されるテストです。
- 統合テストは練習であり、テスト構文ではありません。具体的には、複数のクラスの相互作用から生じる高レベルの機能をテストする方法です。
ただし、これでもまだ完全には解明されていません。明らかに、私はテスト プラクティス、テスト タイプ、またはテスト構文の命名法の専門家ではありません。上記の例で示した 2 種類の構文について、私が思いついた最適な名前は、それぞれ"'assert' syntax"と"'it ... do' syntax"です。これらの名前が広く使用されていない限り、StackOverflow ユーザーの皆さん、アドバイスが必要です!