Вы должны высмеять ваш адаптер LDAP, а не расширение PHP. Файловые системы и базы данных работают так же ... они фактически не создают файловые системы или базы данных, они просто представляют класс, который обычно взаимодействует с эти источники данных и имитируют определенные типы поведения, как если бы действительно существовал
. Например:
// Load user 12345
$user = UserModel::find(12345);
Обычно, этот вызов будет выходить в базу данных и запрос для пользователя 12345. Тем не менее, мы издевались адаптер PDO и сказал ему отвечать данными, когда его методы query()
или execute()
являются вызывается с ожидаемыми параметрами. Таким образом, хотя кажется, что мы издеваемся над всей базой данных, все, что мы действительно сделали, издевается над классом, наиболее близким к базе данных, но наиболее удаленным от вашего собственного кода.
Надеюсь, вы используете систему аутентификации с адаптером LDAP, которую вы можете обменять с помощью макета. Или класс-оболочка для функций ldap PHP.
Update
Большая проблема заключается в том, что вы используете основные функции 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
вызывается один раз с Params array('ldap_bind', 'mike', 'password')
страхующих, что authenticate()
правильно функционирует
Дело в том, что это уже класс обертки. Вот что я пытаюсь высмеять. –
Можете ли вы опубликовать небольшой пример метода, который вы пытаетесь проверить, и для чего вы хотите проверить? –
О, это мой проект с открытым исходным кодом: https://github.com/klaussilveira/SimpleLDAP –