Если я непосредственно протестирую класс таблицы, использующий шаблон шлюза данных таблицы, это все еще будет модульным тестом? - PullRequest
1 голос
/ 14 марта 2012

Рассмотрим что-то вроде этого:

class UsersTable
{
    public function findUserById($id)
    {
        $sql = "...";
        return $this->adapter->execute($sql);
    }
}

Весь класс в значительной степени представляет собой не что иное, как методы, обертывающие операторы SQL, и в действительности нет сложной логики.По сути, я бы тестировал сам SQL.

Я знаю, что тесты, попадающие в базу данных, часто являются интеграционными тестами, но все же это интеграционный тест, поскольку он тестируется так непосредственно, как модульный тест?

Ответы [ 2 ]

0 голосов
/ 15 марта 2012

Я считаю, что эти интеграционные тесты очень полезны и хорошо дополняют ваши чистые модульные тесты.Они дают вам хорошее представление о том, что ваша база данных правильно подключена и совместима с вашей объектной моделью.Когда я включаю эти типы тестов, я не склонен насмехаться над БД, так как я могу так же легко выполнить все тесты в интеграционном тесте.Однако я рекомендую добавить данные, с которыми вы тестируете, в качестве предварительного условия к тесту.

Я, в сущности, следую этому шаблону:

1) Добавить пользователя в базу данных 2) Вызвать ваш тестируемый метод здесь3) Утвердите, что ваш восстановленный пользователь совпадает с только что созданным.

С этим шаблоном вам не нужно полагаться на существующие данные в БД, которые со временем могут измениться и сделать ваши тесты хрупкими.

0 голосов
/ 14 марта 2012

Я бы сказал, что поскольку вы тестируете больше, чем просто логику этого конкретного модуля (findUserById), это интеграционный тест.Если вы хотите правильно выполнить модульное тестирование, я бы рассмотрел фиктивные объекты и внедрение зависимостей.Так как похоже, что вы используете PHP, я думаю, вы, вероятно, используете phpUnit для модульного тестирования, а phpUnit позволяет имитировать.Чтобы выполнить модульное тестирование этой функции, вам нужно смоделировать метод execute члена адаптера и утверждать, что он был вызван один раз с правильной строкой $ sql.Для этих целей я бы сказал, что вы должны предполагать, что метод execute работает правильно, поэтому нет необходимости его проверять. Здесь - это ссылка на phpUnit's, которая описывает их объектную насмешку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...