首頁  >  文章  >  web前端  >  了解乾淨的程式碼:單元測試 ⚡

了解乾淨的程式碼:單元測試 ⚡

PHPz
PHPz原創
2024-08-29 14:00:431022瀏覽

Understanding Clean Code: Unit Tests ⚡

在軟體開發中,單元測試是有助於確保程式碼正確性的重要實踐。

《乾淨的程式碼:敏捷軟體流程手冊》的第 9 章,標題為“單元測試”,深入探討了編寫乾淨且有效的單元測試的原則和實踐。

在本文中,我們將總結本章的重點,並提供 JavaScript 範例來說明這些概念。


?為什麼單元測試很重要

單元測試涉及為程式碼的各個單元或元件編寫測試,以驗證它們是否按預期運行。單元測試的主要目標是:

1- 儘早發現錯誤: 在開發過程中發現問題,然後再投入生產。

2-

促進重構: 確保程式碼的變更不會破壞現有功能。

3-

記錄程式碼行為: 作為如何使用程式碼的文件。


?有效單元測試的原則

⚡ 一次測試一件事

每個單元測試都應該關注功能的一個面向。這使得測試更容易理解和維護。如果測試失敗,你就會確切知道問題出在哪裡。


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 test 將執行所有測試並提供有關其狀態的回饋。


結論

編寫乾淨有效的單元測試對於維護高品質程式碼至關重要。

透過遵循 Clean Code 第 9 章中概述的原則,您可以確保您的測驗可靠、可理解且有價值。

在 JavaScript 程式碼中實現這些實踐不僅可以提高測試質量,還有助於建立更健壯且可維護的程式碼庫。

快樂編碼!

以上是了解乾淨的程式碼:單元測試 ⚡的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn