В разработке программного обеспечения модульное тестирование — это важнейшая практика, которая помогает гарантировать корректность вашего кода.
Глава 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 не только улучшит качество ваших тестов, но и будет способствовать созданию более надежной и удобной в обслуживании базы кода.
Удачного программирования!
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3