Вы должны издеваться над вашим адаптером LDAP, а не над расширением PHP. Моды файловой системы и базы данных работают одинаково ... на самом деле они не создают файловые системы или базы данных, они просто представляют класс, который обычно взаимодействует с этими источниками данных и имитируют определенное поведение, как если бы оно действительно существовало.
Например:
// Load user 12345
$user = UserModel::find(12345);
Обычно этот вызов отправляется в базу данных и запрашивает пользователя 12345. Однако мы смоделировали адаптер PDO и сказали ему отвечать данными, когда его методы query()
или execute()
вызываются с ожидаемыми параметрами. , Итак, хотя кажется, что мы смоделировали всю базу данных, все, что мы на самом деле сделали, это высмеяли класс, ближайший к базе данных, но самый удаленный от вашего собственного кода.
Надеемся, что вы используете систему аутентификации с адаптером LDAP, которую вы можете сменить. Или класс-оболочка для функций ldap в PHP.
Обновление
Большая проблема в том, что вы используете базовые функции ldap почти во всех методах. Не проблема с кодом на самом деле ... но это сложно для модульного тестирования. Я справился с этим, создав единый метод, который позаботился бы обо всем этом общении и сделал против этого утверждения:
(отказ от ответственности: этот код не имеет логического смысла и не будет работать вообще ... только для примера)
class LDAP_Auth {
public function authenticate($username, $password) {
// Extra business logic or other things that need to be tested
return $this->_callLdap('ldap_bind', $username, $password);
}
protected function _callLdap() {
$args = func_get_args();
$functionName = array_shift($args); // First argument should be the function name
return call_user_func_array($functionName, $args);
}
}
Таким образом, каждая функция ldap_*
вызывается из одного и того же метода _callLdap()
. Если вы хотите проверить метод authenticate()
, все, что вам нужно сделать, это:
- создать фиктивный объект самого класса
- смоделируйте метод
_callLdap
и подтвердите, что он был вызван один раз с правильными аргументами
- затем вызовите
authenticate()
как обычно
Примерно так:
$ldapMock = $this->getMock('LDAP_Auth', array('_callLdap');
$ldapMock->expects($this->once())
->method('_callLdap')
->with(array('ldap_bind', 'mike', 'password'))
->will($this->returnValue(true));
$ldapMock->authenticate('mike', 'password');
Этот тест подтверждает, что метод _callLdap
вызывается один раз с параметрами array('ldap_bind', 'mike', 'password')
, гарантируя, что authenticate()
работает нормально