Skip to content

Instantly share code, notes, and snippets.

@TomckySan
Created October 11, 2019 01:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save TomckySan/e31817813a39b7f1b89c04a97a1180c1 to your computer and use it in GitHub Desktop.
Save TomckySan/e31817813a39b7f1b89c04a97a1180c1 to your computer and use it in GitHub Desktop.
<?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