Я довольно новичок в Test Driven Development, и я только начал изучать принципы SOLID, поэтому я надеялся, что кто-то сможет мне помочь. У меня возникли некоторые концептуальные проблемы с пониманием принципа единой ответственности в контексте разработки модульных тестов и методов в парадигме TDD. Так, например, сказать, что я хочу, чтобы разработать метод, который удаляет элемент из database-, прежде чем мой код выглядел бы следующим ...Одиночный принцип ответственности, разработка, основанная на тестах, и функциональный дизайн
Я хотел бы начать с определения тестового случая:
"Delete_Item_ReturnsTrue": function() {
//Setup
var ItemToDelete = "NameOfSomeItem";
//Action
var BooleanResult = Delete(ItemToDelete);
//Assert
if (BooleanResult === true) {
return true;
} else {
console.log("Test: Delete_Item_ReturnsTrue() - Failed.");
return false;
}
}
я бы запустить тест, чтобы убедиться, что это не удалось, то я бы разработать метод ...
function Delete(ItemToDelete) {
var Database = ConnectToDatabase();
var Query = BuildQuery(ItemToDelete);
var QueryResult = Database.Query(Query);
if (QueryResult.error !== true) {
//if there's no error then...
return true;
} else {
return false;
}
}
Если я правильно понимать единый принцип ответственности, метод, который я изначально написал имел обязанности удаления элемента AND возвращает true, если не было ошибки. Так что, если я следую SOLID парадигму оригинальный метод должен быть переработан, чтобы выглядеть как ...
function Delete(WhatToDelete, WhereToDeleteItFrom) {
WhereToDeleteItFrom.delete(WhatToDelete);
}
Выполнение дизайн как таковой, изменил мой метод от булевой функции к функции ничтожной, так что теперь я не могу действительно проверить новый метод таким же образом, как я тестировал свой старый метод.
Я предполагаю, что я мог бы проверить заброшенные исключения, но тогда это не делает это интеграционным тестом, а не модульным тестом, потому что в методе нет никакого конкретного исключения?
Я разрабатываю и реализую дополнительную функцию, которая проверяет базу данных для использования в моем модульном тесте?
Я просто не проверяю его, потому что он недействителен? Как именно это работает в TDD?
Пройти ли я в mock-хранилище, а затем вернуть его после его изменения? Разве это не просто эссенциально возвращает меня к квадрату?
Передаю ли я ссылку на макет хранилища, а затем просто проверяю репозиторий после завершения этого метода? Разве это не считается побочным эффектом?