Practice_PHPUnit test of STDIN
1.0.0
นี่คือตัวอย่างการทดสอบ PHPUnit เพื่อตรวจสอบความสามารถในการทำงานของฟังก์ชันด้านล่าง ซึ่งได้รับค่าจาก "STDIN" (อินพุตมาตรฐาน) และส่งกลับค่านั้น
function getContentsFromStdin ()
{
$ contents = file_get_contents ( ' php://stdin ' );
if ( $ contents === false ){
throw new RuntimeException ( ' Failed to read contents from STDIN. ' );
}
return $ contents ;
}
หากต้องการทดสอบความสามารถในการทำงานของ STDIN
โดยใช้ PHPUnit วิธีหนึ่งคือสร้างแบบจำลองที่แทนที่สตรีม php://
เป็น wrapper และแทนที่ค่าจาก STDIN
final class FunctionGetContentsFromStdinTest extends PHPUnit Framework TestCase
{
public function testRegularInput ()
{
$ result_expect = ' World! ' ;
// Register stream wrapper "MockPhpStream" to "php://" protocol
$ existed = in_array ( ' php ' , stream_get_wrappers ());
if ( $ existed ) {
stream_wrapper_unregister ( " php " );
}
stream_wrapper_register ( " php " , '\ KEINOSTestsMockPhpStream ' );
// Set value to STDIN
file_put_contents ( ' php://stdin ' , $ result_expect );
// Get value from function and restore registration
$ result_actual = KEINOS Sample getContentsFromStdin ();
stream_wrapper_restore ( " php " );
// Test
$ this -> assertSame ( $ result_expect , $ result_actual );
}
}
สคริปต์ตัวตัดคำเพื่อจำลองกระแส PHP://
กระดาษห่อที่เป็นประโยชน์นี้จัดทำโดย Denis ในโพสต์บล็อกของเขา
หากต้องการดูการทดสอบที่ใช้งานจริง ให้โคลน repo นี้และรันการทดสอบ
$ composer install
...
$ composer test
> ./vendor/bin/phpunit --testdox --bootstrap ./vendor/autoload.php tests
PHPUnit 7.5.20 by Sebastian Bergmann and contributors.
GetContentsFromFunction
Regular input
Time: 76 ms, Memory: 4.00 MB
OK (1 test, 1 assertion)
$ docker build -t test:local .
...
$ docker run --rm test:local
> ./vendor/bin/phpunit --testdox --bootstrap ./vendor/autoload.php tests
PHPUnit 9.1.3 by Sebastian Bergmann and contributors.
Get Contents From Function
Regular input
Time: 00:00.030, Memory: 4.00 MB
OK (1 test, 1 assertion)