ホームページ  >  記事  >  バックエンド開発  >  phpunit デカップリングテスト

phpunit デカップリングテスト

WBOY
WBOYオリジナル
2016-06-23 13:39:001179ブラウズ

皆さん、こんにちは。私は現在 phpunit の単体テストを学んでいます。
これに関して解決できない問題が見つかりました。
現在の開発フレームワーク zend フレームワーク 1 は、コントローラー層をテストするときにモデル層を分離する必要があります。
例:

public function phpunitAction(){        $enterpriseModel = new Model_Enterprise();        $sum = $enterpriseModel->getTotal();        print 'asd';        file_put_contents('xx.log',"suma is ".$sum[0]['total']."\r\n",FILE_APPEND);    }

テスト ケースを作成するときは、インスタンス化中にデータベース内のデータをクエリする代わりに、phpunit のモック オブジェクトを使用してオブジェクトを模倣する必要があります。
ドキュメントを読んで自分でテストケースを書きましたが、何か間違っているようです。
すごい

でも、うまくいきません。
アドバイスをお願いします。


ディスカッションへの返信 (解決策)

1.$oClientMock Model_Enterprise オブジェクト
2. getMock の 2 番目のパラメーターは、コピーする必要があるメソッドを渡す必要があります。そうでない場合、元のメソッドはコピーされません

public function testPhpunitAction(){        $oClientMock = $this->getMock('Model_Enterprise');        $res = array(            0=>array(                'total'=>22            )        );        $oClientMock->expects($this->once()) // 设定次数            ->method('getTotal') // 设定方法            ->will($this->returnValue($res)); // 设定方法返回值        $enterpriseModel = new Model_Enterprise();        $sum = $enterpriseModel->getTotal();        $user_info['user_name'] = 'root';        $user_info['real_name'] = 'root';        $user_info['id'] = 1;        $user_info['group_ids'] = array(0=>1);        $session = new Zend_Session_Namespace('UserInfo');        $session->user_info = $user_info;        $params = array('action' => 'phpunit', 'controller' => 'index', 'module' => 'analyze');        $url = $this->url($this->urlizeOptions($params));        $this->dispatch($url);    }






こんにちは、こんにちは、私は http://bbs.csdn.net/topics/390923963 のオリジナル投稿者です。phpunit の問題について質問させていただきました。
あなたの返信を読んで、とても役に立ちました。
私が聞きたいのは、MVC フレームワークでテストのためにコントローラー層を分離する方法です。
たとえば、コントローラーがあります。


class EnterPrise_AnnounceController extends ZendX_Controller_Action
{
public function needchecknumAction() {
$info = $announceMo del->getTotal("status IN ( '". Model_Announce::STATUS_PENDING ."')");
$info['result'] = $info['total'];
return Common_Protocols::generate_json_response($info);
}
}

方法テストケースで使用してください MOCKを使用する場合、フレームワークのモデル層はコントローラー内で呼び出されませんが、私のモックは呼び出されますか?

こんにちは、こんにちは。私は http://bbs.csdn.net/topics/390923963 の元の投稿者です。phpunit の問題について質問しました。

あなたの返信を読んで、とても役に立ちました。
私が聞きたいのは、MVC フレームワークでテストのためにコントローラー層を分離する方法です。
たとえば、コントローラーがあります。


class EnterPrise_AnnounceController extends ZendX_Controller_Action
{
public function needchecknumAction() {
$info = $announceMo del->getTotal("status IN ( '". Model_Announce::STATUS_PENDING ."')");
$info['result'] = $info['total'];
return Common_Protocols::generate_json_response($info);
}
}

方法テストケースで使用してください MOCKを使用すると、フレームワークのモデル層はコントローラーで呼び出されませんが、私のモックは呼び出されますか?

MOCK はクラスをシミュレートできませんが、オブジェクトのみをシミュレートできます。コントローラー内の新しいデータベース モデルを set/get メソッドに置き換えてモックに設定する必要があります


ありがとう、とても役に立ちました
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。