我正在爲第三方代碼做一個PHPUnit測試,它執行fgets()命令並等待輸入,這基本上阻止了我的單元測試。有沒有人有關於如何從單元測試向fgets()傳遞數據的建議?單元測試fgets()的PHP代碼
例如緣故,我想要做的是這樣的:
<?php
$myinput = "GO SOUTH\n";
magicallyQueueIntoSTDINBuffer($myinput);
assertTrue($game->listen() === "You enter the cave"); // Right now, this halts everything.
?>
上述假設$遊戲 - >聽()監聽STDIN,聽到「南下」,並返回「你進入洞穴「
真正的代碼是更復雜的,但上面把本質放入上下文中。
這是一個依賴注入抽象一個很好的案例。不是直接在代碼中調用'fgets',而是將一個將該函數包裝到'$ game'構造函數中的對象。這個對象可以在單元測試中被模擬。 – deceze
我同意,但不幸的是我使用第三方代碼。 (PHPAGI for asterisk,確切地說)它在庫中有fgets()硬編碼。我可以破解它,但是當代碼改變時我不得不重新實現破解,或者凍結我的版本。只是看看是否有其他選擇。 – Anthony