Dieses Paket ist ein eigenständiges Paket des Monkey Patching von ci-phpunit-test.
Dies stellt vier Monkey-Patcher bereit.
ExitPatcher
: Konvertiert exit()
in eine AusnahmeFunctionPatcher
: Patcht FunktionenMethodPatcher
: Patcht Methoden in benutzerdefinierten KlassenConstantPatcher
: Ändert konstante Werte exit()
in „Exception“.$ composer require --dev kenjis/monkey-patch
Hinweis: Die Zeilennummer beim Auftreten eines Fehlers weicht wahrscheinlich vom tatsächlichen Quellcode ab. Bitte überprüfen Sie die Cache-Datei der Quelle, die Monkey Patching erstellt.
Hinweis: Die Verwendung dieses Pakets wirkt sich negativ auf die Testgeschwindigkeit aus.
exit()
in „Exception“. Dieser Patcher wandelt die Anweisungen exit()
oder die()
im laufenden Betrieb in Ausnahmen um.
Wenn Sie einen Controller wie den folgenden haben:
public function index ()
{
$ this -> output
-> set_status_header ( 200 )
-> set_content_type ( ' application/json ' , ' utf-8 ' )
-> set_output ( json_encode ([ ' foo ' => ' bar ' ]))
-> _display ();
exit ();
}
Ein Testfall könnte so aussehen:
public function test_index ()
{
try {
$ this -> request ( ' GET ' , ' welcome/index ' );
} catch ( ExitException $ e ) {
$ output = ob_get_clean ();
}
$ this -> assertContains ( ' {"foo":"bar"} ' , $ output );
}
Dieser Patcher ermöglicht das Ersetzen globaler Funktionen, die von PHPUnit nicht gemobbt werden können.
Es gibt jedoch einige Einschränkungen. Einige Funktionen können nicht ersetzt werden und es kann zu Fehlern kommen.
Daher können wir standardmäßig nur ein Dutzend vordefinierte Funktionen in FunctionPatcher ersetzen.
public function test_index ()
{
MonkeyPatch:: patchFunction ( ' mt_rand ' , 100 , ' Welcome::index ' );
$ output = $ this -> request ( ' GET ' , ' welcome/index ' );
$ this -> assertContains ( ' 100 ' , $ output );
}
MonkeyPatch::patchFunction()
ersetzt die native PHP-Funktion mt_rand()
in Welcome::index
-Methode und gibt in der Testmethode 100
zurück.
Hinweis: Wenn Sie MonkeyPatch::patchFunction()
ohne das dritte Argument aufrufen, werden alle in der Testmethode aufgerufenen Funktionen (in include_paths
und nicht exclude_paths
) ersetzt. So könnte beispielsweise eine Funktion in Ihrem Bibliothekscode ersetzt werden und dies zu einem unerwarteten Ergebnis führen.
Sie können den Rückgabewert der gepatchten Funktion mithilfe des PHP-Abschlusses ändern:
MonkeyPatch:: patchFunction (
' function_exists ' ,
function ( $ function ) {
if ( $ function === ' random_bytes ' ) {
return true ;
} elseif ( $ function === ' openssl_random_pseudo_bytes ' ) {
return false ;
} elseif ( $ function === ' mcrypt_create_iv ' ) {
return false ;
} else {
return __GO_TO_ORIG__ ;
}
},
Welcome::class
);
Wenn Sie andere Funktionen patchen möchten, können Sie diese zu „functions_to_patch“ in MonkeyPatchManager::init()
hinzufügen.
Es gibt jedoch einige bekannte Einschränkungen:
[$this, 'method']
an array_map()
und die method()
Methode in der Klasse ist nicht öffentlich.Dieser Patcher ermöglicht das Ersetzen von Methoden in benutzerdefinierten Klassen.
public function test_index ()
{
MonkeyPatch:: patchMethod (
Category_model::class,
[ ' get_category_list ' => [( object ) [ ' name ' => ' Nothing ' ]]]
);
$ output = $ this -> request ( ' GET ' , ' welcome/index ' );
$ this -> assertContains ( ' Nothing ' , $ output );
}
MonkeyPatch::patchMethod()
ersetzt die Methode get_category_list()
in Category_model
und gibt [(object) ['name' => 'Nothing']]
in der Testmethode zurück.
Dieser Patcher ermöglicht das Ersetzen konstanter Werte.
public function test_index ()
{
MonkeyPatch:: patchConstant (
' ENVIRONMENT ' ,
' development ' ,
Welcome::class . ' ::index '
);
$ output = $ this -> request ( ' GET ' , ' welcome/index ' );
$ this -> assertContains ( ' development ' , $ output );
}
MonkeyPatch::patchConstant()
ersetzt den Rückgabewert der Konstante ENVIRONMENT
in Welcome::index
Methode.
Es gibt einige bekannte Einschränkungen:
Siehe ci-phpunit-test-Dokumente.
Dieses Paket ist unter der MIT-Lizenz lizenziert.
Bitte werfen Sie einen Blick auf LICENSE
.