app/lib/lib/Cake/Console/Command/TestShellTest.php が参考になると思います。
1. app/Test/Case/Console/Command/yourfile.php にファイルを作成しApp::uses('your class', 'relative path').
、次の例を使用してクラスを記述します。
App::uses('yourShellClass', 'Console/Command');
App::uses('ShellDispatcher', 'Console');
App::uses('Shell', 'Console');
2. シェル クラス A からモック クラス B を作成します。その関数は、クラス A で返されるデータを使用します。例:
class TestYourShellClass extends YourShellClass {
public function F1 ($parms){
//if you need use database here, you can
//$this->yourModel = ClassRegistry::init('yourModel');
return $this->_F1($parms);
}
}
3、クラスAのテストクラスを書きます。起動時に初期化する必要があります。例えば:
class YourShellClassTest extends CakeTestCase {
public function setUp()
{
parent::setUp();
$out = $this->getMock('ConsoleOutput', [], [], '', false);
$in = $this->getMock('ConsoleInput', [], [], '', false);
$this->Shell = $this->getMock(
// this is your class B, which mocks class A.
'TestYourShellClass',
['in', 'out', 'hr', 'help', 'error', 'err', '_stop', 'initialize', '_run', 'clear'],
[$out, $out, $in]
);
$this->Shell->OptionParser = $this->getMock('ConsoleOptionParser', [], [null, false]);
}
/**
* tear down method.
*
* @return void
*/
public function tearDown()
{
parent::tearDown();
unset($this->Dispatch, $this->Shell);
}
}
4、テスト機能はこのようにすることができます。
/**
* test _F1.
*
* @return void
*/
public function testF1()
{
$this->Shell->startup();
$return = $this->Shell->F1();
$expectedSellerCount = 14;
$this->assertSame($expectedSellerCount, $return);
}
そして、http://yourdomain/test.phpで結果を表示できます