テストする理由
ユーザーが見つける前にバグを発見します。
「テストする理由」はCoddyKit上の無料Lua Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLua Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Lua Academyコースには全4レッスンが含まれています。
なぜテストするのか
自動テストとは、自分のコードを検証するコードです。プログラムを手動で実行して出力を目視で確認する代わりに、テストランナーが検証する小さなアサーションを記述します。
Luaで最も人気のあるフレームワークはbustedです。動作を説明し、成功または失敗の結果を報告するための、わかりやすい構文を提供します。
テストをしない代償
テストがなければ、変更するたびに賭けをするようなものです。1つのバグを修正した結果、別のバグをひそかに壊してしまうことがあります。コードベースが大きくなると、手動で徹底的に確認するのは不可能になります。
テストは安全網として機能します。リファクタリングを行うとき、テストスイートがすべて成功すれば、動作が維持されているとわかります。
最初のテストファイル
bustedのテストファイルは通常spec/フォルダーに置き、ファイル名の末尾を_spec.luaにします。ファイル内で、何をテストするのかを記述します。
次は、役に立つ最小限の例です。単純な算術演算が機能することを確認します。
describe("math", function()
it("adds numbers", function()
assert.are.equal(4, 2 + 2)
end)
end)bustedの実行
LuaRocksを使ってbustedをインストールします。luarocks install bustedを実行してください。その後、プロジェクトのルートでbustedコマンドを実行します。
_spec.luaで終わるファイルを自動的に見つけ、すべてのitブロックを実行します。成功するたびにドットを、失敗するたびにFを表示します。
自作モジュールのテスト
実際のテストでは、requireを使ってテスト対象のモジュールをインポートします。その関数を呼び出し、結果をアサーションで検証します。
関数のテーブルを返すcalculator.luaモジュールがあるとします。
local calc = require("calculator")
describe("calculator", function()
it("multiplies", function()
assert.are.equal(6, calc.mul(2, 3))
end)
end)テストをドキュメントとして活用する
適切に書かれたテストは、生きたドキュメントとしても機能します。新しい開発者はspecファイルを読むことで、関数がどのように動作することを意図されているのかを正確に理解できます。
説明が通常の文字列で書かれているため、文章のように読むことができます。たとえば「calculator multiplies」のようになります。
describe("string utils", function()
it("trims whitespace", function()
assert.are.equal("hi", utils.trim(" hi "))
end)
end)高速なフィードバックループ
テストの本当の力は、その速さにあります。テストスイート全体を実行しても数秒しかかからず、アプリを手動でクリックして確認するよりはるかに高速です。
開発中は、bustedをウォッチモードで実行したり、1つのファイルだけを対象にしたりして、フィードバックを短く保つこともできます。
-- run only one file
-- busted spec/calculator_spec.luaリグレッションの検出
リグレッションとは、以前は動作していたコードでバグが再発することです。バグを見つけたら、まずそのバグを再現するテストを書くのが最善です。
テストが失敗することを確認したら、成功するまでコードを修正します。そのテストが、同じバグの再発を防ぐ役割を果たします。
it("handles empty input", function()
assert.are.equal(0, calc.sum({}))
end)良いテストの条件
良いテストは、高速で、独立しており、決定的です。制御されていないネットワーク、時刻、乱数に依存させないでください。
各テストでは、明確な1つの動作を確認するべきです。テストが失敗したとき、本文を読まなくても名前から何が壊れたのかわかるようにしてください。
テストピラミッド
テストピラミッドでは、多数の小さな単体テスト、より少数の結合テスト、そしてごく少数のエンドツーエンドテストを用意します。単体テストは低コストで高速なので、優先して使いましょう。
bustedは主に単体テスト用のツールですが、結合テストにも使用できます。
変更する自信
テストの最も大きな利点は、自信を持てることです。信頼できるテストスイートがあれば、大胆にリファクタリングし、依存関係をアップグレードして、より速くリリースできます。
このコースでは、bustedを基礎から学びます。テストの構造、アサーション、モックやスパイなどのテストダブルを扱います。
describe("feature", function()
it("still works after refactor", function()
assert.is_true(feature.enabled())
end)
end)理解度チェック
なぜテストを書くのか、理解できているか確認しましょう。
まとめ
テストとは、コードを検証するコードです。bustedはLuaを代表するフレームワークで、_spec.luaファイルを見つけ、成功または失敗を報告します。
良いテストは、高速で、独立しており、決定的です。リグレッションを検出し、ドキュメントとして機能し、自由にコードを変更する自信を与えてくれます。
よくある質問
「テストする理由」レッスンは無料ですか?
はい。「テストする理由」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Lua Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Lua Academyコースには全4レッスンが含まれています。
「テストする理由」で何を学びますか?
ユーザーが見つける前にバグを発見します。 ブラウザで直接実行するハンズオンコードでLua Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Lua Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLua Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「テストする理由」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLua Academyレッスンでコードを書いて実行できますか?
はい。すべてのLua Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。