結合テストを構築できるようにすること CakePHP + PHPUnit
はじめに
表題を実現する為のコードベタ貼り
経緯
PHPUnit 使って結合テスト(アクション単体に対する MVC の結合)は構築できるの? -> 公式Docsに出来る旨が書いてある -> やる
app/Controller
1 <?php 2 App::uses('AppController', 'Controller'); 3 4 class UserController extends AppController { 5 public function index() { 6 } 7 } 8 ?>
結合テストファイル[Test/Case/Request/UserTest.php]
$ mkdir Test/Case/Request
1 <?php 2 3 App::uses('HttpSocket', 'Network/Http'); 4 5 class UserControllerTest extends ControllerTestCase { 6 public function setUp() { 7 parent::setUp(); 8 $this->base_url = 'http://' . $_SERVER['HOSTNAME']; 9 $this->http_client = new HttpSocket(); 10 } 11 12 public function testIndex() { 13 $response = $this->http_client->get($this-> base_url . '/user', array(null)); 14 $this->assertEquals(200, $response->code); 15 } 16 } 17 ?>
$ ./Console/cake test app Request/User Welcome to CakePHP v2.5.6 Console --------------------------------------------------------------- App : app Path: /opt/lampp/htdocs/cakephp/app/ --------------------------------------------------------------- CakePHP Test Shell --------------------------------------------------------------- PHPUnit 3.7.32 by Sebastian Bergmann. . Time: 34 ms, Memory: 11.75Mb OK (1 test, 1 assertion)
コントローラーのフローテストなら Test/Case/Controller/UserTest.php に書く
1 <?php 2 3 class UserControllerTest extends ControllerTestCase { 4 public function setUp() { 5 parent::setUp(); 6 } 7 8 public function testIndex() { 9 $returns = $this->testAction('/user', array('method' => 'get')); 10 $this->assertEquals(null, $returns); 11 } 12 } 13 ?>
xUnit で結合テストを書いてよいものか
こちらは歴史的経緯など調べておこう