describeブロックとitブロック
テストスイートを構成します。
「describeブロックとitブロック」はCoddyKit上の無料Lua Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLua Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Lua Academyコースには全4レッスンが含まれています。
specの構造
bustedでは、describeとitという2つの主要な関数でテストを構成します。describeブロックは関連するテストをまとめ、各itブロックは1つのテストケースになります。
この構造はビヘイビア駆動開発に由来しており、自然な文章のように読めます。
describe("Stack", function()
it("starts empty", function()
assert.are.equal(0, Stack.new():size())
end)
end)describeブロック
describeは名前の文字列と関数を受け取ります。名前には、モジュールやクラスなど、テスト対象の単位や機能を示すべきです。
関数の中にあるものはすべて、そのグループに属します。名前はテスト出力に表示され、結果を整理します。
describe("calculator", function()
-- tests live here
end)itブロック
各itブロックでは、1つの具体的な動作を説明します。文字列は、describeで始まる文を完成させる内容にします。
「calculator」と「adds two numbers」をつなげて読むと、意図を明確に示す仕様になります。
describe("calculator", function()
it("adds two numbers", function()
assert.are.equal(5, calc.add(2, 3))
end)
end)describeブロックのネスト
describeブロックをネストして、コンテキストを表現できます。内側のブロックでは、特定のメソッドや特殊な条件について説明できます。
ネストすると関連するケースをまとめられ、読みやすくインデントされた出力が得られます。
describe("List", function()
describe("push", function()
it("adds an item", function()
assert.are.equal(1, list:push("a"):size())
end)
end)
end)before_eachのセットアップ
before_eachは、そのブロック内の各itの前に関数を実行します。テスト同士で状態を共有しないよう、毎回新しいテストデータを作成するために使用します。
これにより、各テストが独立します。あるテストの変更が次のテストに漏れることはありません。
describe("Stack", function()
local s
before_each(function()
s = Stack.new()
end)
it("pushes", function()
s:push(1)
assert.are.equal(1, s:size())
end)
end)after_eachのティアダウン
after_eachは、各テストの後に実行されます。一時ファイル、開いている接続、グローバル状態などのリソースを後片付けするために使用します。
セットアップとティアダウンを組み合わせることで、テスト間で環境をリセットできます。
after_each(function()
os.remove("temp.db")
end)setupとteardown
bustedにはsetupとteardownも用意されています。これらはテストごとに1回ではなく、describeブロックごとに1回実行されます。
テストごとにセットアップすると無駄になる、共有接続を開くといったコストの高い1回限りの処理に使用します。
describe("db", function()
setup(function()
db = connect()
end)
teardown(function()
db:close()
end)
end)保留中のテスト
まだ書いていないテストを記録しておきたい場合があります。pendingに説明を渡して呼び出すか、関数のないitブロックを記述します。
bustedはこれらを成功でも失敗でもなく保留中として報告し、完成させる必要があることを知らせます。
it("handles unicode", function()
pending("not implemented yet")
end)テストの絞り込みと除外
デバッグ中は、テストの一部に集中できます。コマンドラインで--tagsを付けたり、bustedのヘルパーを使ったりすると、必要なテストだけを実行できます。
これにより、1つの問題箇所を反復して修正するときに、テストスイート全体を実行せずに済みます。
-- run only tests tagged 'fast'
-- busted --tags=fast命名規則
良い名前を付けると、失敗の原因が説明なしでもわかります。describeは対象から始め、itは動作を表す動詞から始めてください。
「works」や「test1」のような曖昧な名前は避けてください。失敗したテストを、対応可能なバグ報告のように読める名前にします。
describe("parser", function()
it("rejects malformed input", function()
assert.has_error(function() parser.parse("{") end)
end)
end)まとめて構成する
完全なspecでは、describeグループ、before_eachによるセットアップ、対象を絞ったitケースを組み合わせます。このひな形は、1つのテストから数百のテストまで拡張できます。
ブロックを小さく保ち、各itでは1つの動作に集中すると、出力が最もわかりやすくなります。
describe("Account", function()
local acc
before_each(function() acc = Account.new(100) end)
it("withdraws funds", function()
acc:withdraw(40)
assert.are.equal(60, acc.balance)
end)
end)理解度チェック
bustedのブロック構造について理解できているか確認しましょう。
まとめ
describeは関連するテストをまとめ、itは仕様のように読める単一のケースを定義します。describeブロックをネストしてコンテキストを表現します。
テストごとの独立性にはbefore_eachとafter_eachを、ブロックごとに1回行う処理にはsetupとteardownを使用します。未完成の作業にはpendingを付けます。
よくある質問
「describeブロックとitブロック」レッスンは無料ですか?
はい。「describeブロックとitブロック」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Lua Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Lua Academyコースには全4レッスンが含まれています。
「describeブロックとitブロック」で何を学びますか?
テストスイートを構成します。 ブラウザで直接実行するハンズオンコードでLua Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Lua Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLua Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「describeブロックとitブロック」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLua Academyレッスンでコードを書いて実行できますか?
はい。すべてのLua Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。