ホームページ ウェブフロントエンド jsチュートリアル クリーンなコードを理解する: 単体テスト ⚡

クリーンなコードを理解する: 単体テスト ⚡

Aug 29, 2024 pm 02:00 PM

Understanding Clean Code: Unit Tests ⚡

ソフトウェア開発において、単体テストはコードの正確性を確認するのに役立つ重要な実践です。

『Clean Code: A Handbook of Agile Software Craftsmanship』の第 9 章「単体テスト」では、クリーンで効果的な単体テストを作成するための原則と実践方法について詳しく説明しています。

この記事では、この章の重要なポイントを要約し、これらの概念を説明するために JavaScript の例を示します。


?単体テストが重要な理由

単体テストには、コードの個々のユニットまたはコンポーネントに対するテストを作成して、それらが期待どおりに機能することを確認することが含まれます。単体テストの主な目的は次のとおりです:

1- バグの早期検出: 開発中に問題が本番環境に到達する前に検出します。

2- リファクタリングの促進: コードへの変更によって既存の機能が損なわれないようにします。

3- コードの動作を文書化する: コードがどのように使用されるかを文書化します。


?効果的な単体テストの原則

⚡ 一度に 1 つずつテストする

各単体テストは、機能の 1 つの側面に焦点を当てる必要があります。これにより、テストの理解と保守が容易になります。テストが失敗した場合、問題がどこにあるのかを正確に知ることができます。

function add(a, b) {
    return a + b;
}

// Test case for the add function
function testAdd() {
    // Test adding positive numbers
    assertEqual(add(2, 3), 5, '2 + 3 should be 5');
    // Test adding negative numbers
    assertEqual(add(-1, -1), -2, '-1 + -1 should be -2');
}

// A simple assertion function
function assertEqual(actual, expected, message) {
    if (actual !== expected) {
        throw new Error(message);
    }
}
ログイン後にコピー

⚡ テストを読みやすくする

テストは読みやすく、理解しやすいものである必要があります。テスト関数にはわかりやすい名前を使用し、アサーションを明確にします。これにより、他の人 (そしてあなた自身) が各テストで何を検証しているのかをすぐに把握することができます。

function isEven(number) {
    return number % 2 === 0;
}

// Descriptive test function
function testIsEven() {
    assertEqual(isEven(4), true, '4 should be even');
    assertEqual(isEven(5), false, '5 should be odd');
}
ログイン後にコピー

⚡ 明確でわかりやすい名前を使用してください

テスト ケースの名前は、何をテストしているのかを説明する必要があります。これにより、テストの可読性と保守性が向上します。

function calculateTotalPrice(items) {
    return items.reduce((total, item) => total + item.price, 0);
}

// Descriptive test case names
function testCalculateTotalPrice() {
    assertEqual(calculateTotalPrice([{ price: 10 }, { price: 20 }]), 30, 'Total price should be 30 for items costing 10 and 20');
    assertEqual(calculateTotalPrice([{ price: 5 }]), 5, 'Total price should be 5 for a single item costing 5');
}
ログイン後にコピー

⚡ テストを独立した状態に保つ

各テストは他のテストから独立している必要があります。共有状態に依存するテストは、不安定なテストにつながり、デバッグを困難にする可能性があります。

function multiply(a, b) {
    return a * b;
}

// Independent test cases
function testMultiply() {
    assertEqual(multiply(2, 3), 6, '2 * 3 should be 6');
    assertEqual(multiply(0, 10), 0, '0 * 10 should be 0');
}
ログイン後にコピー

⚡ モックとスタブを適切に使用する

モックとスタブは、依存関係をシミュレートすることにより、テスト対象のコード単位を分離するのに役立ちます。ただし、テストが過度に複雑になることを避けるために、慎重に使用してください。

// Example of using a mock for a database call
function getUser(id) {
    // Imagine this function makes a database call
    return database.getUserById(id);
}

function testGetUser() {
    const mockDatabase = {
        getUserById: (id) => ({ id, name: 'John Doe' }),
    };

    const result = getUser(1, mockDatabase);
    assertEqual(result.name, 'John Doe', 'User name should be John Doe');
}
ログイン後にコピー

⚡ テストを自動化する

単体テストの実行を自動化し、定期的に実行されるようにします。継続的インテグレーション (CI) ツールは、変更が加えられるたびにテストを自動的に実行するのに役立ちます。

Jest などのテスト フレームワークを使用している場合は、package.json でスクリプトを設定できます。

"scripts": {
    "test": "jest"
}
ログイン後にコピー

npm テストを実行すると、すべてのテストが実行され、そのステータスに関するフィードバックが提供されます。


結論

高品質のコードを維持するには、クリーンで効果的な単体テストを作成することが不可欠です。

クリーン コードの第 9 章で概説されている原則に従うことで、テストが信頼性が高く、理解しやすく、価値のあるものであることを保証できます。

これらのプラクティスを JavaScript コードに実装すると、テストの品質が向上するだけでなく、より堅牢で保守しやすいコードベースにも貢献します。

コーディングを楽しんでください!

以上がクリーンなコードを理解する: 単体テスト ⚡の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

独自のJavaScriptライブラリを作成および公開するにはどうすればよいですか? 独自のJavaScriptライブラリを作成および公開するにはどうすればよいですか? Mar 18, 2025 pm 03:12 PM

記事では、JavaScriptライブラリの作成、公開、および維持について説明し、計画、開発、テスト、ドキュメント、およびプロモーション戦略に焦点を当てています。

ブラウザでのパフォーマンスのためにJavaScriptコードを最適化するにはどうすればよいですか? ブラウザでのパフォーマンスのためにJavaScriptコードを最適化するにはどうすればよいですか? Mar 18, 2025 pm 03:14 PM

この記事では、ブラウザでJavaScriptのパフォーマンスを最適化するための戦略について説明し、実行時間の短縮、ページの負荷速度への影響を最小限に抑えることに焦点を当てています。

フロントエンドのサーマルペーパーレシートのために文字化けしたコード印刷に遭遇した場合はどうすればよいですか? フロントエンドのサーマルペーパーレシートのために文字化けしたコード印刷に遭遇した場合はどうすればよいですか? Apr 04, 2025 pm 02:42 PM

フロントエンドのサーマルペーパーチケット印刷のためのよくある質問とソリューションフロントエンド開発におけるチケット印刷は、一般的な要件です。しかし、多くの開発者が実装しています...

ブラウザ開発者ツールを使用してJavaScriptコードを効果的にデバッグするにはどうすればよいですか? ブラウザ開発者ツールを使用してJavaScriptコードを効果的にデバッグするにはどうすればよいですか? Mar 18, 2025 pm 03:16 PM

この記事では、ブラウザ開発者ツールを使用した効果的なJavaScriptデバッグについて説明し、ブレークポイントの設定、コンソールの使用、パフォーマンスの分析に焦点を当てています。

誰がより多くのPythonまたはJavaScriptを支払われますか? 誰がより多くのPythonまたはJavaScriptを支払われますか? Apr 04, 2025 am 12:09 AM

スキルや業界のニーズに応じて、PythonおよびJavaScript開発者には絶対的な給与はありません。 1. Pythonは、データサイエンスと機械学習でさらに支払われる場合があります。 2。JavaScriptは、フロントエンドとフルスタックの開発に大きな需要があり、その給与もかなりです。 3。影響要因には、経験、地理的位置、会社の規模、特定のスキルが含まれます。

ソースマップを使用して、マイナイドJavaScriptコードをデバッグするにはどうすればよいですか? ソースマップを使用して、マイナイドJavaScriptコードをデバッグするにはどうすればよいですか? Mar 18, 2025 pm 03:17 PM

この記事では、ソースマップを使用して、元のコードにマッピングすることにより、Minified JavaScriptをデバッグする方法について説明します。ソースマップの有効化、ブレークポイントの設定、Chrome DevtoolsやWebpackなどのツールの使用について説明します。

chart.js:パイ、ドーナツ、バブルチャートを始めます chart.js:パイ、ドーナツ、バブルチャートを始めます Mar 15, 2025 am 09:19 AM

このチュートリアルでは、chart.jsを使用してパイ、リング、およびバブルチャートを作成する方法について説明します。以前は、4つのチャートタイプのchart.js:ラインチャートとバーチャート(チュートリアル2)、およびレーダーチャートと極地域チャート(チュートリアル3)を学びました。 パイとリングチャートを作成します パイチャートとリングチャートは、さまざまな部分に分かれている全体の割合を示すのに理想的です。たとえば、パイチャートを使用して、サファリの男性ライオン、女性ライオン、若いライオンの割合、または異なる候補者が選挙で受け取る票の割合を示すことができます。 パイチャートは、単一のパラメーターまたはデータセットの比較にのみ適しています。パイチャートのファンの角度はデータポイントの数値サイズに依存するため、パイチャートは値のあるエンティティをゼロ値で描画できないことに注意してください。これは、割合がゼロのエンティティを意味します

Console.log出力の違い結果:なぜ2つの呼び出しが異なるのですか? Console.log出力の違い結果:なぜ2つの呼び出しが異なるのですか? Apr 04, 2025 pm 05:12 PM

Console.log出力の違いの根本原因に関する詳細な議論。この記事では、Console.log関数の出力結果の違いをコードの一部で分析し、その背後にある理由を説明します。 �...

See all articles