Hallo BlackScorp,
wenn du einen Unit-Test von externen APIs abhängig machst, ist es streng genommen kein Unit-Test mehr. Prinzipiell musst du dir deshalb auch keine Testumgebung bauen, mit der das funktioniert, sondern die SSH-Verbindung so abstrahieren, dass es gar keine "echte" Verbindung gibt, sondern die Verbindung nur simuliert und die Rückgaben fix sind.
Auch auf die Gefahr hin, dass ich deine Skills stark unterschätze (schlag mich nicht, wenn ich dir jetzt hier mein spärliches Grundlagenwissen präsentiere), ich halte Mocks / Stubs da für die richtige Technologie (https://phpunit.de/manual/current/en...l#test-doubles). Ein Beispiel (Code ist gänzlich ungetestet):
Problem ist natürlich, dass du so kaum sagen kannst, ob dein Code auch in einer Produktivumgebung funktioniert. Um den Aufwand möglichst gering zu halten, würde ich dafür Akzeptanztests schreiben (auch mit PHPUnit), die NUR lokal bei dir ausgeführt werden und davon ausgehen, dass die Akzeptanztests aussagekräftig genug sind, dass es auf anderen Systemen auch funktioniert.
Die Lokal ausgeführten Akzeptanztests kannst du ja so auslegen, dass du lokal mehrere Beispielumgebungen nachbildest (z.B. mit VMs), die tatsächlich recht gut gewährleisten, dass dein Code sauber funktioniert.
wenn du einen Unit-Test von externen APIs abhängig machst, ist es streng genommen kein Unit-Test mehr. Prinzipiell musst du dir deshalb auch keine Testumgebung bauen, mit der das funktioniert, sondern die SSH-Verbindung so abstrahieren, dass es gar keine "echte" Verbindung gibt, sondern die Verbindung nur simuliert und die Rückgaben fix sind.
Auch auf die Gefahr hin, dass ich deine Skills stark unterschätze (schlag mich nicht, wenn ich dir jetzt hier mein spärliches Grundlagenwissen präsentiere), ich halte Mocks / Stubs da für die richtige Technologie (https://phpunit.de/manual/current/en...l#test-doubles). Ein Beispiel (Code ist gänzlich ungetestet):
PHP-Code:
class SshTest {
private $ssh;
public function setUp() {
$this->ssh = $this->getMock('Ssh', array('execute'));
}
public function testExecute() {
$this->ssh->expects($this->any())
->method('execute')
->will($this->returnValue('andreas'));
$this->ssh->execute("whoami");
}
}
class Ssh {
private $session;
// ...
public function execute($command) {
return ssh2_exec($this->session , $command);
}
}
Die Lokal ausgeführten Akzeptanztests kannst du ja so auslegen, dass du lokal mehrere Beispielumgebungen nachbildest (z.B. mit VMs), die tatsächlich recht gut gewährleisten, dass dein Code sauber funktioniert.
Kommentar