アサーション
期待する動作を表現します。
「アサーション」はCoddyKit上の無料Lua Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLua Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Lua Academyコースには全4レッスンが含まれています。
アサーションの役割
アサーションはテストの中心です。必ず真であるべき事実を表します。真であればテストは続行され、そうでなければbustedがわかりやすいメッセージとともに失敗を記録します。
bustedはluassertライブラリを使用し、グローバルなassertテーブルを通じてアクセスします。
assert.are.equal(4, 2 + 2)are.equal
assert.are.equalは、==演算子を使って等価性を確認します。第1引数が期待値で、第2引数が実際の値です。
数値、文字列、真偽値では機能しますが、テーブルの場合は内容ではなく同一性を比較します。
assert.are.equal("hello", greet())
assert.are.equal(10, count)テーブルに対するare.same
テーブルの内容を深く比較するには、assert.are.sameを使います。2つのテーブルが同じ値を保持しているかを再帰的に確認します。
データ構造にはsameを、プリミティブ値や同一性の確認にはequalを使います。
assert.are.same({1, 2, 3}, split("1,2,3"))
assert.are.same({x = 1}, point)Truthy判定
assert.is_trueとassert.is_falseは、正確な真偽値を確認します。assert.is_truthyは、nilでもfalseでもない値をすべて受け入れます。
真偽値の結果を明確に期待する場合は、厳密な形式を選びます。
assert.is_true(user.active)
assert.is_truthy(find("x"))
assert.is_false(list:isEmpty())nilの確認
assert.is_nilは値がnilであることを確認し、assert.is_not_nilは値が存在することを確認します。これらは検索結果を確認するときによく使います。
nilとequalで比較するよりも、意図が明確になります。
assert.is_nil(map["missing"])
assert.is_not_nil(map["found"])is_notによる否定
ほとんどのアサーションは、is_notを挿入するか、are_not形式を使うことで否定できます。これは、値が異なっていなければならないことを表します。
たとえば、assert.are_not.equalは2つの値が異なる場合に成功します。
assert.are_not.equal(1, 2)
assert.is_not_nil(result)エラーのテスト
コードがエラーを発生させることを確認するには、コードを関数でラップしてassert.has_errorに渡します。bustedが関数を呼び出し、エラーが発生したことを確認します。
2番目の引数として期待する文字列を渡せば、エラーメッセージも確認できます。
assert.has_error(function()
withdraw(-5)
end, "amount must be positive")has_no.errors
反対の確認にはassert.has_no.errorsを使います。ラップした関数がエラーを発生させずに実行されると成功します。
戻り値を確認しない場合でも、正常系の呼び出しがクラッシュしないことを確認するのに役立ちます。
assert.has_no.errors(function()
parse("valid input")
end)カスタム失敗メッセージ
ほとんどのアサーションには、失敗内容を明確にするメッセージを付けられます。期待する内容がレポートに説明されるよう、追加の引数として渡します。
明確なメッセージがあれば、わかりにくい失敗を対処可能な情報に変えられます。
assert.is_true(ok, "login should succeed")修飾子によるマッチング
luassertには、より詳細な確認を行うための修飾子とマッチャーがあります。たとえば、assert.matchesは文字列をLuaパターンに照合します。
出力が変動するため、完全一致の確認では厳しすぎる場合に便利です。
assert.matches("%d%d%d%d", get_year())
assert.matches("error", log_line, 1, true)適切なアサーションの選択
明確にするため、最も具体的なアサーションを選びます。テーブルにはsameを、プリミティブ値にはequalを、失敗にはhas_errorを、真偽値にはtruthy判定を使います。
具体的なアサーションはよりわかりやすい失敗メッセージを生成するため、デバッグを速められます。
describe("queue", function()
it("dequeues in order", function()
assert.are.same({"a", "b"}, q:drain())
end)
end)理解度チェック
bustedのアサーションについて理解度を確認しましょう。
まとめ
luassertは、bustedのassertテーブルを支えています。プリミティブ値にはare.equalを、テーブルの深い比較にはare.sameを、必要に応じてtruthy判定やnilチェックを使います。
has_errorでテストの失敗を、has_no.errorsで成功を確認します。is_notで否定し、よりわかりやすいレポートのためにメッセージを追加します。
AI チューターと学ぶ Lua — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 40
- レッスン
- 159
よくある質問
「アサーション」レッスンは無料ですか?
はい。「アサーション」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Lua Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Lua Academyコースには全4レッスンが含まれています。
「アサーション」で何を学びますか?
期待する動作を表現します。 ブラウザで直接実行するハンズオンコードでLua Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Lua Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLua Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「アサーション」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLua Academyレッスンでコードを書いて実行できますか?
はい。すべてのLua Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。