{"id":19521,"date":"2018-04-19T08:30:09","date_gmt":"2018-04-18T23:30:09","guid":{"rendered":"https:\/\/www.sssg.org\/blogs\/hiro345\/?p=19521"},"modified":"2018-07-09T18:07:07","modified_gmt":"2018-07-09T09:07:07","slug":"docker%ef%bc%8bphpunit%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%81%bf%e3%82%88%e3%81%86","status":"publish","type":"post","link":"https:\/\/www.hiro345.net\/blogs\/hiro345\/archives\/19521.html","title":{"rendered":"Docker\uff0bPHPUnit\u3092\u4f7f\u3063\u3066\u307f\u3088\u3046"},"content":{"rendered":"<p>Docker\uff0bPHPUnit\u3092\u4f7f\u3063\u3066\u307f\u307e\u3057\u305f\u3002\u4e0b\u8a18\u3092\u53c2\u8003\u306b\u3057\u3066\u3044\u307e\u3059\u3002\u306a\u304a\u3001\u3053\u3061\u3089\u3067\u306fPHP 7.0 + PHPUnit 6.5 \u3067\u306e\u66f8\u304d\u65b9\u3092\u7d39\u4ecb\u3057\u3066\u3044\u307e\u3059\u3002PHPUnit 7.0 \u3092\u4f7f\u3046\u5834\u5408\u306f PHP 7.1\u4ee5\u4e0a\u304c\u5fc5\u8981\u306a\u3088\u3046\u3067\u3059\u3002<\/p>\n<ul>\n<li><a href=\"https:\/\/qiita.com\/masayuki5160\/items\/b305d5a19f3ec632f3e3\">Docker\u3092\u4f7f\u3044\u624b\u8efd\u306bPHPUnit\u3092\u306f\u3058\u3081\u308b &#8211; Qiita<\/a><\/li>\n<li><a href=\"https:\/\/phpunit.de\/manual\/6.5\/en\/appendixes.configuration.html\">PHPUnit Manual \u2013 Appendix C. The XML Configuration File<\/a><\/li>\n<\/ul>\n<p><!--more--><\/p>\n<p>CakePHP3\u3067\u306e\u30c6\u30b9\u30c8\u3092\u8abf\u3079\u3066\u3044\u305f\u306e\u3067\u3059\u304c\u3001\u305d\u306e\u524d\u306bDocker\uff0bPHPUnit\u304b\u306a\u3001\u3068\u601d\u3063\u3066\u8abf\u3079\u307e\u3057\u305f\u3002CakePHP3\u3060\u3068\u4e0b\u8a18\u304c\u3042\u308b\u3088\u3046\u3067\u3059\u3002<\/p>\n<ul>\n<li><a href=\"https:\/\/qiita.com\/motty93\/items\/ccdaf130443a8334bd93\">CakePHP3 docker\u3092\u7528\u3044\u3066\u5727\u5012\u7684\u74b0\u5883\u69cb\u7bc9 &#8211; Qiita<\/a><\/li>\n<li><a href=\"http:\/\/insight.hiliberate.biz\/?p=2313\">\u3010CakePHP3\u3011PHPUnit\u3067\u30c6\u30b9\u30c8\u306e\u81ea\u52d5\u5316 \u2013 INSIGHT<\/a><\/li>\n<\/ul>\n<h2>\u7528\u610f\u3059\u308b\u30d5\u30a1\u30a4\u30eb \u305d\u306e1<\/h2>\n<p>PHPUnit\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb phpunit.xml<\/p>\n<pre class=\"brush: xml; gutter: true\">\r\n&lt;phpunit\r\n        xmlns:xsi=&quot;http:\/\/www.w3.org\/2001\/XMLSchema-instance&quot;\r\n        xsi:noNamespaceSchemaLocation=&quot;https:\/\/schema.phpunit.de\/6.5\/phpunit.xsd&quot;\r\n        backupGlobals=&quot;true&quot;\r\n        backupStaticAttributes=&quot;false&quot;\r\n        bootstrap=&quot;tests\/bootstrap.php&quot;\r\n        cacheTokens=&quot;false&quot;\r\n        colors=&quot;false&quot;\r\n        convertErrorsToExceptions=&quot;true&quot;\r\n        convertNoticesToExceptions=&quot;true&quot;\r\n        convertWarningsToExceptions=&quot;true&quot;\r\n        forceCoversAnnotation=&quot;false&quot;\r\n        mapTestClassNameToCoveredClassName=&quot;false&quot;\r\n        printerClass=&quot;PHPUnit\\TextUI\\ResultPrinter&quot;\r\n        processIsolation=&quot;false&quot;\r\n        stopOnError=&quot;false&quot;\r\n        stopOnFailure=&quot;false&quot;\r\n        stopOnIncomplete=&quot;false&quot;\r\n        stopOnSkipped=&quot;false&quot;\r\n        stopOnRisky=&quot;false&quot;\r\n        testSuiteLoaderClass=&quot;PHPUnit\\Runner\\StandardTestSuiteLoader&quot;\r\n        timeoutForSmallTests=&quot;1&quot;\r\n        timeoutForMediumTests=&quot;10&quot;\r\n        timeoutForLargeTests=&quot;60&quot;\r\n        verbose=&quot;false&quot;&gt;\r\n        &lt;testsuites&gt;\r\n          &lt;testsuite name=&quot;Sample Test Suite&quot;&gt;\r\n            &lt;file&gt;.\/sampleTest.php&lt;\/file&gt;\r\n          &lt;\/testsuite&gt;\r\n        &lt;\/testsuites&gt;\r\n&lt;\/phpunit&gt;\r\n<\/pre>\n<p>\u30c6\u30b9\u30c8\u8d77\u52d5\u7528 tests\/bootstrap.php <\/p>\n<pre class=\"brush: php; gutter: true\">\r\n&lt;?php\r\n\r\nrequire_once __DIR__ . &#039;\/..\/vendor\/autoload.php&#039;;\r\n<\/pre>\n<p>composer\u3067PHPUnit\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u306e\u3067\u3001composer.json <\/p>\n<pre class=\"brush: bash; gutter: true\">\r\ncomposer.json \r\n{\r\n    &quot;name&quot;: &quot;phpunit&quot;,\r\n    &quot;description&quot;: &quot;PHPUnit&quot;,\r\n    &quot;require&quot;: {\r\n        &quot;phpunit\/phpunit&quot;: &quot;6.5.*&quot;\r\n    }\r\n}\r\n<\/pre>\n<h2>\u7528\u610f\u3059\u308b\u30d5\u30a1\u30a4\u30eb \u305d\u306e2<\/h2>\n<p>\u30c6\u30b9\u30c8\u5bfe\u8c61\u306eSample.php <\/p>\n<pre class=\"brush: php; gutter: true\">\r\n&lt;?php\r\n\r\nclass Sample\r\n{\r\n    public function hello($v) \r\n    {\r\n        return &#039;Hello &#039; . $v;\r\n    }\r\n}\r\n<\/pre>\n<p>Sample\u30af\u30e9\u30b9\u3092\u30c6\u30b9\u30c8\u3059\u308b sampleTest.php <\/p>\n<pre class=\"brush: php; gutter: true\">\r\n&lt;?php\r\nrequire &#039;Sample.php&#039;;\r\nuse PHPUnit\\Framework\\TestCase;\r\n\r\nclass sampleTest extends TestCase\r\n{\r\n    private $sample;\r\n\r\n    public function setUp()\r\n    {\r\n        $this-&gt;sample = new Sample();\r\n    }\r\n\r\n    public function tearDown()\r\n    {\r\n    }\r\n\r\n    public function test\u30b5\u30f3\u30d7\u30eb()\r\n    {\r\n        $this-&gt;assertTrue(true, &quot;sample test comment&quot;);\r\n    }\r\n\r\n    \/**\r\n     *  @dataProvider exampleSample\r\n     *\/\r\n    public function test\u50241\u306bHello\u304c\u3064\u304f\u3053\u3068($value1, $expected)\r\n    {\r\n        $this-&gt;assertEquals($expected, $this-&gt;sample-&gt;hello($value1));\r\n    }\r\n\r\n    public function exampleSample()\r\n    {\r\n        return [\r\n            [ &#039;PHP&#039;, &#039;Hello PHP&#039; ],\r\n            [ &#039;Python&#039;, &#039;Hello Python&#039; ],\r\n            [ &#039;Java&#039;, &#039;Hello Java&#039; ],\r\n        ];\r\n    }\r\n}\r\n<\/pre>\n<h2>\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/h2>\n<p>Docker\u306ecomposer\u30a4\u30e1\u30fc\u30b8\u3092\u4f7f\u3044\u307e\u3059\u3002<\/p>\n<pre class=\"brush: bash; gutter: true\">\r\n$ docker run  -u $UID:$GROUPS --rm -it -v $PWD:\/app -w \/app composer install\r\n<\/pre>\n<h2>\u5b9f\u884c<\/h2>\n<p>vendor\/bin\/phpunit\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u308b\u306f\u305a\u306a\u306e\u3067\u3001\u3053\u308c\u3092php:7.0-apache\u306e\u30a4\u30e1\u30fc\u30b8\u3092\u4f7f\u3063\u3066\u5b9f\u884c\u3057\u307e\u3059\u3002\u6700\u521d\u306f\u3001sampleTest.php\u306bassertTrue()\u3078false\u3092\u6e21\u3057\u3066\u3044\u308b\u30c6\u30b9\u30c8\u304c\u3042\u308b\u306e\u3067\u5fc5\u305a\u5931\u6557\u3057\u307e\u3059\u3002sed\u30b3\u30de\u30f3\u30c9\u3067false\u3092true\u3068\u306a\u304a\u3057\u3066\u5b9f\u884c\u3059\u308b\u3068\u30c6\u30b9\u30c8\u304c\u3059\u3079\u3066\u6210\u529f\u3057\u307e\u3059\u3002\u6700\u5f8c\u306esed\u306f\u5143\u306b\u3082\u3069\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<pre class=\"brush: bash; gutter: true\">\r\n$ docker run -u $UID:$GROUPS  --rm -it -p 80:80 \\\r\n   -v $(pwd):\/var\/www\/html \\\r\n   --name php70-apache php:7.0-apache \\\r\n     \/var\/www\/html\/vendor\/bin\/phpunit -c phpunit.xml\r\nPHPUnit 6.5.8 by Sebastian Bergmann and contributors.\r\n\r\nF...                                                                4 \/ 4 (100%)\r\n\r\nTime: 37 ms, Memory: 4.00MB\r\n\r\nThere was 1 failure:\r\n\r\n1) sampleTest::test\u30b5\u30f3\u30d7\u30eb\r\nsample test comment\r\nFailed asserting that false is true.\r\n\r\n\/var\/www\/html\/sampleTest.php:20\r\n\r\nFAILURES!\r\nTests: 4, Assertions: 4, Failures: 1.\r\n\r\n\r\n$ sed -i &#039;s\/false\/true\/&#039; sampleTest.php \r\n$ docker run -u $UID:$GROUPS  --rm -it -p 80:80 \\\r\n   -v $(pwd):\/var\/www\/html \\\r\n   --name php70-apache php:7.0-apache \\\r\n     \/var\/www\/html\/vendor\/bin\/phpunit -c phpunit.xml\r\nPHPUnit 6.5.8 by Sebastian Bergmann and contributors.\r\n\r\n....                                                                4 \/ 4 (100%)\r\n\r\nTime: 40 ms, Memory: 4.00MB\r\n\r\nOK (4 tests, 4 assertions)\r\n$ sed -i &#039;s\/true\/false\/&#039; sampleTest.php \r\n<\/pre>\n<div>\n<iframe loading=\"lazy\" style=\"width: 120px; height: 240px;\" src=\"\/\/rcm-jp.amazon.co.jp\/e\/cm?t=hiro345-22&amp;o=9&amp;p=8&amp;l=as1&amp;asins=479813547X&amp;ref=tf_til&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr\" height=\"240\" width=\"320\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe><iframe loading=\"lazy\" style=\"width: 120px; height: 240px;\" src=\"\/\/rcm-jp.amazon.co.jp\/e\/cm?t=hiro345-22&amp;o=9&amp;p=8&amp;l=as1&amp;asins=4844336789&amp;ref=tf_til&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr\" height=\"240\" width=\"320\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n<\/div>\n<ul>\n<li><a type=\"amzn\" asin=\"479813547X\">\u72ec\u7fd2PHP \u7b2c3\u7248 <\/a><\/li>\n<li><a type=\"amzn\" asin=\"4844336789\">CakePHP\u3067\u5b66\u3076\u7d99\u7d9a\u7684\u30a4\u30f3\u30c6\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3 (impress top gear) <\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Docker\uff0bPHPUnit\u3092\u4f7f\u3063\u3066\u307f\u307e\u3057\u305f\u3002\u4e0b\u8a18\u3092\u53c2\u8003\u306b\u3057\u3066\u3044\u307e\u3059\u3002\u306a\u304a\u3001\u3053\u3061\u3089\u3067\u306fPHP 7.0 + PHPUnit 6.5 \u3067\u306e\u66f8\u304d\u65b9\u3092\u7d39\u4ecb\u3057\u3066\u3044\u307e\u3059\u3002PHPUnit 7.0 \u3092\u4f7f\u3046\u5834\u5408\u306f PHP 7.1\u4ee5\u4e0a\u304c\u5fc5\u8981 &hellip; <a href=\"https:\/\/www.hiro345.net\/blogs\/hiro345\/archives\/19521.html\">\u7d9a\u304d\u3092\u8aad\u3080 <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[15],"tags":[993,295],"class_list":["post-19521","post","type-post","status-publish","format-standard","hentry","category-program","tag-docker","tag-php"],"_links":{"self":[{"href":"https:\/\/www.hiro345.net\/blogs\/hiro345\/wp-json\/wp\/v2\/posts\/19521","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hiro345.net\/blogs\/hiro345\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hiro345.net\/blogs\/hiro345\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hiro345.net\/blogs\/hiro345\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hiro345.net\/blogs\/hiro345\/wp-json\/wp\/v2\/comments?post=19521"}],"version-history":[{"count":7,"href":"https:\/\/www.hiro345.net\/blogs\/hiro345\/wp-json\/wp\/v2\/posts\/19521\/revisions"}],"predecessor-version":[{"id":19601,"href":"https:\/\/www.hiro345.net\/blogs\/hiro345\/wp-json\/wp\/v2\/posts\/19521\/revisions\/19601"}],"wp:attachment":[{"href":"https:\/\/www.hiro345.net\/blogs\/hiro345\/wp-json\/wp\/v2\/media?parent=19521"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hiro345.net\/blogs\/hiro345\/wp-json\/wp\/v2\/categories?post=19521"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hiro345.net\/blogs\/hiro345\/wp-json\/wp\/v2\/tags?post=19521"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}