Non ho dimestichezza con la cosa SF2 comando, ma la documentazione SF2 avere un esempio su testarlo a http://symfony.com/doc/2.0/components/console.html#testing-commands
In generale, si potrebbe separare STDIN
e STDOUT
dalla console app in modo da poter sostituire con un'altra risorsa di streaming, ad esempio fopen(php://memory)
. Invece di readline
, si utilizza
fwrite($outputStream, 'Prompt');
$line = stream_get_line($inputStream, 1024, PHP_EOL);
L'idea è di rendere il componente testabile senza richiedere l'ambiente console vera e propria. L'utilizzo di questo approccio consente di verificare il contenuto dello Stream in qualsiasi momento nel test. So if you run Command "foo" in your console app and want to test that the output is "bar" you simply rewind the appropriate resource and read it's content. Un'alternativa sarebbe utilizzare SplTempFileObject
.
class ConsoleApp
…
public function __construct($inputStream, $outputStream)
{
$this->inputStream = $inputStream;
$this->outputStream = $outputStream;
}
}
nello scenario del mondo reale che ci si crea la console app con
$app = new ConsoleApp(STDIN, STDOUT);
Ma nel tuo test è possibile impostare la ConsoleApp
con un flusso di vostra scelta:
public function setup()
{
$i = fopen('php://memory', 'w');
$o = fopen('php://memory', 'w');
$this->consoleApp = new ConsoleApp($i, $o);
}
Un esempio di UnitTest che utilizza questo metodo per l'outstream sarebbe
Grazie mille :) – canni