babyapi の簡単な例を使用して初期の main.go を作成します
CLI を使用してテスト ボイラープレートを生成
プレースホルダーに予想される JSON を入力して各テストを実装します
テストを実行して、テストが成功することを確認してください。
PUT は冪等であるため、すべてのフィールドを含める必要があります。これを回避するために、PATCH リクエストで完了を切り替えるサポートを追加したいと考えています。まず、この機能がどのようになるかを予想する簡単なテストを追加します
babyapi はデフォルトで PATCH をサポートしていないため、このテストは失敗します。 TODO 構造体に Patch を実装することで修正できます。 2 つのテストで機能を定義したため、最も単純な実装では Completed = true を設定するだけではなく、request
の値を使用する必要があります。
TODO の完了ステータスを変更できるようになりましたが、この新しいテスト セットで示されているように、PATCH を使用して他のフィールドを変更することはまだできません
パッチを更新して残りのフィールドを設定します
リクエスト フィールドが空であっても常に TODO を更新するため、テストは依然として失敗します。空の値をチェックするように実装を更新してこの問題を修正します
新しい UpdateWithPatch テストは合格しますが、以前のテストは失敗します。 Completed を *bool に変更したため、空の値で作成された TODO は null
として表示されます。
Render for TODO を実装して、nil を false として扱えるようにします
テスト駆動開発で PATCH 機能を実装すると、堅牢なテストのセットと適切に実装された機能が得られました。テストでは PATCH リクエストの予期される入力と出力を定義することから始めたので、リクエスト内の空の値をチェックしないことによって引き起こされる問題は簡単にわかりました。また、既存のテストでは、Completed のタイプを *bool.
に変更するときに破壊的な変更から保護することができました。テスト駆動開発は、完全にテストされた正しいコードを作成するための効果的なアプローチです。テストを念頭に置いて始めることで、テストを後回しにするのではなく、すべてのコードがテスト可能になるように設計されるようになります。
TDD の採用に迷っている場合は、始めるためのアイデアをいくつか紹介します。
TDD がコードの書き方に適していない場合でも、常に身に付けておくべき強力なツールです。少なくとも時間をかけて試してみて、それが開発プロセスにどのような影響を与えるかを確認することをお勧めします。
","image":"http://www.luping.net/uploads/20240730/172232678666a89f02dc4a5.jpg","datePublished":"2024-07-30T16:06:26+08:00","dateModified":"2024-07-30T16:06:26+08:00","author":{"@type":"Person","name":"luping.net","url":"https://www.luping.net/articlelist/0_1.html"}}テスト駆動開発は、十分にテストされ、リファクタリング可能なコードを確保するための効果的な方法です。基本的な考え方は、テストを書くことから開発を始めるということです。これらのテストは期待値を明確に文書化し、実装を成功させるためのルーブリックを作成します。適切に実行すると、コードを記述する前に関数の予想される入出力を明確に定義できます。これにはすぐにいくつかの利点があります:
メリットを理解できたので、次の手順に従ってテスト駆動開発 (TDD) を開始できます。
これらのステップはサイクルで実行されるため、常にテストを追加して現在の実装に挑戦することになります。
最後のステップでは、最小限のコードを記述することが指定されていますが、厳密に従うと作業が退屈になる可能性があります。いつこのルールから逸脱するのが適切かを判断する前に、このルールが存在する理由を理解することが重要です。
あなたには関数 Add(x, y int) int を実装するという使命があります。実装にジャンプして単に x y を返す前に、最も単純なテスト 1 1 == 2 を作成します。それでは、テストに合格する最も単純な実装は何でしょうか?単に return 2 です。これでテストは成功しました!
この時点で、さらにテストが必要であることがわかり、ペースを上げてさらにいくつかテストを追加します。
テストが失敗するので、実装を修正する必要があります。今回は単に 3 を返すことも 105 を返すこともできないため、すべてのテストに有効な解決策を見つける必要があります。これにより、return x y.
という実装が行われます。これは単純な例では過度に退屈に感じられますが、この方法を厳密に遵守すると、実装を信頼するだけでなく複数のテストを作成することになります。もちろん、x y を返すという最初のアイデアはうまくいきましたが、重要なのは、コードについての自分自身の理解ではなく、テストに依存するように自分自身を再訓練することです。現実の世界では、このコード部分に取り組んでいるのはあなただけではないため、必然的に実装の詳細を忘れてしまいます。このプロセスでは、より多くのテストを作成し、単純な実装を壊すためのより多くの方法を考える必要があります。
最終的には経験を積み、遭遇するさまざまなシナリオで機能するバランスを見つけることを学びます。機能のフルスピード実装に戻り、バグが減り、より保守しやすいコードを作成できることがわかります。
HTTP REST API に TDD を使用した、より複雑な例を見てみましょう。このステップバイステップ ガイドでは、私の Go フレームワークである babyapi を使用していますが、この概念はどこにでも適用できます。
babyapi はジェネリックスを使用して Go 構造体を中心とした完全な CRUD API を作成し、完全な REST API とクライアント CLI を非常に簡単に作成できるようにします。これに加えて、babytest パッケージは、エンドツーエンドの API テーブル テストを作成するためのいくつかのツールを提供します。 API レベルで TDD を使用すると、新しい API または機能の HTTP 層とストレージ層を一度に完全にテストできます。
免責事項: babyapi は実装の大部分を処理し、テスト定型文の生成にも使用されるため、技術的には TDD から始めているわけではありません。ただし、API に PATCH リクエストのサポートを追加すると、それがどれほど有益であるかがわかります。
新しい Go プロジェクトを作成する
babyapi の簡単な例を使用して初期の main.go を作成します
CLI を使用してテスト ボイラープレートを生成
プレースホルダーに予想される JSON を入力して各テストを実装します
テストを実行して、テストが成功することを確認してください。
PUT は冪等であるため、すべてのフィールドを含める必要があります。これを回避するために、PATCH リクエストで完了を切り替えるサポートを追加したいと考えています。まず、この機能がどのようになるかを予想する簡単なテストを追加します
babyapi はデフォルトで PATCH をサポートしていないため、このテストは失敗します。 TODO 構造体に Patch を実装することで修正できます。 2 つのテストで機能を定義したため、最も単純な実装では Completed = true を設定するだけではなく、request
の値を使用する必要があります。
TODO の完了ステータスを変更できるようになりましたが、この新しいテスト セットで示されているように、PATCH を使用して他のフィールドを変更することはまだできません
パッチを更新して残りのフィールドを設定します
リクエスト フィールドが空であっても常に TODO を更新するため、テストは依然として失敗します。空の値をチェックするように実装を更新してこの問題を修正します
新しい UpdateWithPatch テストは合格しますが、以前のテストは失敗します。 Completed を *bool に変更したため、空の値で作成された TODO は null
として表示されます。
Render for TODO を実装して、nil を false として扱えるようにします
テスト駆動開発で PATCH 機能を実装すると、堅牢なテストのセットと適切に実装された機能が得られました。テストでは PATCH リクエストの予期される入力と出力を定義することから始めたので、リクエスト内の空の値をチェックしないことによって引き起こされる問題は簡単にわかりました。また、既存のテストでは、Completed のタイプを *bool.
に変更するときに破壊的な変更から保護することができました。テスト駆動開発は、完全にテストされた正しいコードを作成するための効果的なアプローチです。テストを念頭に置いて始めることで、テストを後回しにするのではなく、すべてのコードがテスト可能になるように設計されるようになります。
TDD の採用に迷っている場合は、始めるためのアイデアをいくつか紹介します。
TDD がコードの書き方に適していない場合でも、常に身に付けておくべき強力なツールです。少なくとも時間をかけて試してみて、それが開発プロセスにどのような影響を与えるかを確認することをお勧めします。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3