«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Понимание чистого кода: модульные тесты ⚡

Понимание чистого кода: модульные тесты ⚡

Опубликовано 31 августа 2024 г.
Просматривать:214

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 выполнит все ваши тесты и предоставит информацию об их статусе.


Заключение

Написание чистых и эффективных модульных тестов необходимо для поддержания высокого качества кода.

Следуя принципам, изложенным в главе 9 «Чистого кода», вы можете быть уверены, что ваши тесты надежны, понятны и ценны.

Реализация этих практик в вашем коде JavaScript не только улучшит качество ваших тестов, но и будет способствовать созданию более надежной и удобной в обслуживании базы кода.

Удачного программирования!

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/alisamir/understanding-clean-code-unit-tests-5d1a?1. Если есть какие-либо нарушения, свяжитесь с [email protected], чтобы удалить их.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3