SimpleTestでprotected methodのテスト
protectedなメソッドのテストがしたい場合はどうしたらいいのかなと思い、
CakePHPを覗いてみたところ、cake/tests/cases/libs/http_socket.test.phpでテストしてたのでメモ。
http_socketのテストのsetUp()でMockHttpSocketクラスやMockHttpSocketRequestsをnewしてる。
$this->Socket =& new MockHttpSocket(); $this->RequestSocket =& new MockHttpSocketRequests();
で、MockHttpSocket〜はその前のMock::generatePartialで作られたクラス。
if (!class_exists('MockHttpSocket')) { Mock::generatePartial('TestHttpSocket', 'MockHttpSocket', array('read', 'write', 'connect')); Mock::generatePartial('TestHttpSocket', 'MockHttpSocketRequests', array('read', 'write', 'connect', 'request')); }
Mock::generatePartialはSimpleTestに付属してるもので、
Mock::generatePartial(元になるクラス, 作りたいクラス, 追加したいメソッド配列)
という構文らしい。
追加したいメソッドがなければarray()とすればいい。
元になるクラスのTestHttpSocketがその前に定義されていて、
class TestHttpSocket extends HttpSocket {
のように、protectedメソッドを持つテストしたいクラスを継承している。
あとはそのクラスの中でprotectedメソッドを呼び出すpublicメソッドを作ればよさそう。
function configUri($uri = null) { return parent::_configUri($uri); }