Tôi không quen với điều SF2 lệnh, nhưng các tài liệu SF2 có một ví dụ về thử nghiệm nó tại http://symfony.com/doc/2.0/components/console.html#testing-commands
Nói chung, bạn có thể tách STDIN
và STDOUT
từ ứng dụng giao diện điều khiển của bạn, do đó bạn có thể thay thế nó bằng tài nguyên luồng khác, như fopen(php://memory)
. Thay vì readline
, bạn sử dụng
fwrite($outputStream, 'Prompt');
$line = stream_get_line($inputStream, 1024, PHP_EOL);
Ý tưởng là để làm cho thành phần kiểm chứng của bạn mà không đòi hỏi môi trường console thực. Sử dụng phương pháp này cho phép bạn kiểm tra nội dung của Luồng bất kỳ lúc nào trong bài kiểm tra của bạn. 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. Cách khác là sử dụng SplTempFileObject
.
class ConsoleApp
…
public function __construct($inputStream, $outputStream)
{
$this->inputStream = $inputStream;
$this->outputStream = $outputStream;
}
}
Trong kịch bản thế giới thực của bạn, bạn muốn tạo ra các ứng dụng điều khiển với
$app = new ConsoleApp(STDIN, STDOUT);
Nhưng trong thử nghiệm của bạn, bạn có thể thiết lập các ConsoleApp
với một dòng của sự lựa chọn của bạn:
public function setup()
{
$i = fopen('php://memory', 'w');
$o = fopen('php://memory', 'w');
$this->consoleApp = new ConsoleApp($i, $o);
}
Một ví dụ về một UnitTest sử dụng phương pháp này cho outstream sẽ là
Xin cảm ơn :) – canni