Lors du développement d'applications PHP, nous devons souvent considérer la compatibilité du code sur différentes plates-formes de système d'exploitation. Afin de tester si notre code peut fonctionner en douceur sur diverses plates-formes, la fonction php_uname () peut fournir des informations système utiles, telles que le nom du système d'exploitation, la version, l'architecture de la machine, etc. Cependant, nous ne sommes parfois pas toujours en mesure de tester directement sur toutes les plates-formes, en particulier dans les environnements de test automatisés. Heureusement, nous pouvons utiliser des techniques pour simuler la valeur de retour de php_uname () pour faciliter la vérification du comportement du code sous différents systèmes d'exploitation.
Dans cet article, nous présenterons comment tester la compatibilité du code sur différentes plates-formes via la fonction simulée php_uname () pour garantir que nos applications PHP sont compatibles avec divers systèmes.
php_uname () est une fonction intégrée de PHP qui obtient des informations sur le système d'exploitation actuel. Il renvoie une chaîne contenant des informations telles que le nom du système d'exploitation, le numéro de version, l'architecture de la machine, la version du système d'exploitation, etc. Habituellement, le format de valeur de retour est le suivant:
string(31) "Linux myhost 4.15.0-20-generic #21-Ubuntu SMP"
Pour s'assurer que le code fonctionne correctement sur différentes plates-formes de système d'exploitation, il peut ne pas toujours être possible de tester directement à l'aide de différentes plates-formes. Surtout lorsque vous utilisez des outils d'intégration continue (CI), nous ne pouvons pas exécuter le code directement sur chaque plate-forme. Cependant, nous pouvons utiliser une technologie de moquerie pour simuler les informations du système d'exploitation renvoyées par php_uname () pour tester la compatibilité sous différentes plates-formes.
La moquerie est une technique de test courante qui nous permet de simuler le comportement de certaines fonctions ou méthodes lors du test sans réellement compter sur l'environnement externe.
PHP lui-même n'a pas de moyen intégré de moquer directement les fonctions internes telles que php_uname () . Cependant, nous pouvons y parvenir grâce à certaines bibliothèques tierces, telles que le phpunit ou la moquerie .
Si vous utilisez PHPUnit comme cadre de test dans votre projet, vous pouvez simuler le comportement de la fonction php_uname () en créant un double test personnalisé. PHPUnit fournit la méthode CreateMock () , qui peut être utilisée pour simuler le comportement de la méthode d'une classe, mais pour la simulation des fonctions intégrées, il est généralement nécessaire de combiner des extensions Runkit ou d'autres techniques.
// Exemple de code
class MyTest extends PHPUnit\Framework\TestCase
{
public function testSystemInfo()
{
// simulation php_uname() Valeur de retour
$this->setMockFunction('php_uname', 'Linux test-host 5.4.0-40-generic #44-Ubuntu SMP');
// Appeler le code qui doit être testé
$result = php_uname();
// 断言Valeur de retour符合预期
$this->assertEquals('Linux test-host 5.4.0-40-generic #44-Ubuntu SMP', $result);
}
private function setMockFunction($functionName, $mockedValue)
{
runkit_function_redefine($functionName, '', 'return "' . $mockedValue . '";');
}
}
Mockery est une autre bibliothèque PHP Mocking populaire qui fournit une interface plus simple aux fonctions Mock. Voici un exemple d'utilisation de Mockery pour simuler la fonction php_uname () :
use Mockery as m;
class MyTest extends PHPUnit\Framework\TestCase
{
public function tearDown(): void
{
m::close();
}
public function testSystemInfo()
{
// utiliser Mockery simulation php_uname fonction
$mock = m::mock('alias:php');
$mock->shouldReceive('php_uname')->andReturn('Windows NT test-host 10.0');
// Appeler le code qui doit être testé
$result = php_uname();
// 断言Valeur de retour符合预期
$this->assertEquals('Windows NT test-host 10.0', $result);
}
}
Grâce à la technologie de moquerie, nous pouvons facilement simuler les différentes informations sur le système d'exploitation renvoyées par php_uname () , puis vérifier la compatibilité du code sur différentes plates-formes. Par exemple, simulez les environnements Linux, Windows et MacOS pour tester les résultats du code exécuté sous ces plates-formes.
// simulation Linux plate-forme
$this->setMockFunction('php_uname', 'Linux myhost 4.15.0-20-generic #21-Ubuntu SMP');
// simulation Windows plate-forme
$this->setMockFunction('php_uname', 'Windows NT myhost 10.0');
// simulation macOS plate-forme
$this->setMockFunction('php_uname', 'Darwin myhost 19.5.0 Darwin Kernel Version 19.5.0');
Après simulation, vous pouvez utiliser la fonction d'affirmation de Phpunit pour vérifier que le code se comporte comme prévu sur différents systèmes d'exploitation.
En utilisant la technologie Mocking, nous pouvons facilement simuler la valeur de retour de la fonction php_uname () et tester la compatibilité du code sur différentes plates-formes de système d'exploitation. Cette approche permet non seulement de gagner du temps pour effectuer des tests manuels sur plusieurs systèmes d'exploitation, mais nous fournit également un moyen fiable de vérifier les capacités multiplateforme de nos applications.
En simulant différentes informations sur le système d'exploitation, nous pouvons mieux nous assurer que les applications PHP peuvent fonctionner en douceur sur diverses plates-formes, en évitant les problèmes de compatibilité des plates-formes après la sortie.