Created
October 11, 2019 01:48
-
-
Save TomckySan/e31817813a39b7f1b89c04a97a1180c1 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
require 'vendor/autoload.php'; | |
use PHPUnit\Framework\TestCase; | |
use Carbon\Carbon; | |
class Greeter | |
{ | |
/** | |
* PHP標準で用意されているDateTimeだと | |
* greetに引数なしの場合テストを書くことが難しいのでCarbonを使う | |
*/ | |
public function greet() | |
{ | |
$currentDateTime = Carbon::now(); | |
$hour = (int) $currentDateTime->format('H'); | |
if (5 <= $hour && $hour < 12) { | |
return 'おはようございます'; | |
} elseif (12 <= $hour && $hour < 18) { | |
return 'こんにちは'; | |
} elseif ((18 <= $hour && $hour <= 23) || (0 <= $hour && $hour < 5)) { // elseでいいよね.. | |
return 'こんばんは'; | |
} | |
} | |
} | |
class GreeterTest extends TestCase | |
{ | |
function testGreet() | |
{ | |
$greeter = new Greeter(); | |
Carbon::setTestNow(Carbon::createFromTime(5, 0, 0)); | |
$this->assertEquals('おはようございます', $greeter->greet()); | |
Carbon::setTestNow(Carbon::createFromTime(11, 59, 59)); | |
$this->assertEquals('おはようございます', $greeter->greet()); | |
Carbon::setTestNow(Carbon::createFromTime(12, 0, 0)); | |
$this->assertEquals('こんにちは', $greeter->greet()); | |
Carbon::setTestNow(Carbon::createFromTime(17, 59, 59)); | |
$this->assertEquals('こんにちは', $greeter->greet()); | |
Carbon::setTestNow(Carbon::createFromTime(18, 0, 0)); | |
$this->assertEquals('こんばんは', $greeter->greet()); | |
Carbon::setTestNow(Carbon::createFromTime(23, 59, 59)); | |
$this->assertEquals('こんばんは', $greeter->greet()); | |
Carbon::setTestNow(Carbon::createFromTime(24, 0, 0)); | |
$this->assertEquals('こんばんは', $greeter->greet()); | |
Carbon::setTestNow(Carbon::createFromTime(0, 0, 0)); | |
$this->assertEquals('こんばんは', $greeter->greet()); | |
Carbon::setTestNow(Carbon::createFromTime(4, 59, 59)); | |
$this->assertEquals('こんばんは', $greeter->greet()); | |
// 後始末 | |
// 強制設定した時刻をリセット | |
Carbon::setTestNow(); | |
} | |
/** | |
* @dataProvider currentDateTimeProvider | |
* データプロバイダを利用して記述を簡略化する | |
*/ | |
function testGreetWithDataProvider($expected, $hour, $minute, $second) | |
{ | |
$greeter = new Greeter(); | |
Carbon::setTestNow(Carbon::createFromTime($hour, $minute, $second)); | |
$this->assertEquals($expected, $greeter->greet()); | |
// 後始末 | |
// 強制設定した時刻をリセット | |
Carbon::setTestNow(); | |
} | |
public function currentDateTimeProvider() | |
{ | |
return [ | |
['おはようございます', 5, 0, 0], | |
['おはようございます', 11, 59, 59], | |
['こんにちは', 12, 0, 0], | |
['こんにちは', 17, 59, 59], | |
['こんばんは', 18, 0, 0], | |
['こんばんは', 23, 59, 59], | |
['こんばんは', 24, 0, 0], | |
['こんばんは', 0, 0, 0], | |
['こんばんは', 4, 59, 59], | |
]; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment