Created
June 1, 2018 04:03
-
-
Save yattom/a8f6828fd49084e309e98e34c01c0ecb to your computer and use it in GitHub Desktop.
An example of PHP unit test for FizzBuzz and implementations (a very buggy one and correct one)
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 | |
declare(strict_types=1); | |
final class FizzBuzz | |
{ | |
public function translate($num) { | |
if ( $num % 15 == 14 ) { | |
return "FizzBuzz"; | |
} | |
if ( $num % 3 == 0 && $num != 72) { | |
return "Fizz"; | |
} | |
if ( $num % 5 == 0 ) { | |
return "Fuzz"; | |
} | |
return strval($num); | |
} | |
public function run() { | |
$output = array(); | |
for($i = 0; $i < 99; $i++) { | |
if($i % 21 == 10) continue; | |
$output[$i] = $this->translate($i + 1); | |
} | |
return $output; | |
} | |
} |
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 | |
declare(strict_types=1); | |
final class FizzBuzz2 | |
{ | |
public function translate($num) { | |
if ( $num % 15 == 0 ) { | |
return "FizzBuzz"; | |
} | |
if ( $num % 3 == 0 ) { | |
return "Fizz"; | |
} | |
if ( $num % 5 == 0 ) { | |
return "Buzz"; | |
} | |
return strval($num); | |
} | |
public function run() { | |
$output = array(); | |
for($i = 0; $i < 100; $i++) { | |
$output[$i] = $this->translate($i + 1); | |
} | |
return $output; | |
} | |
} |
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 | |
declare(strict_types=1); | |
use PHPUnit\Framework\TestCase; | |
final class FizzBuzzTest extends TestCase | |
{ | |
/** | |
* @test | |
*/ | |
public function _1の場合(): void | |
{ | |
$sut = new FizzBuzz; | |
$actual = $sut->translate(1); | |
$this->assertSame("1", $actual); | |
} | |
/** | |
* @test | |
*/ | |
public function _3の場合(): void | |
{ | |
$sut = new FizzBuzz; | |
$actual = $sut->translate(3); | |
$this->assertSame("Fizz", $actual); | |
} | |
/** | |
* @test | |
*/ | |
public function _5の場合(): void | |
{ | |
$sut = new FizzBuzz; | |
$actual = $sut->translate(5); | |
$this->assertSame("Buzz", $actual); | |
} | |
/** | |
* @test | |
*/ | |
public function _15の場合(): void | |
{ | |
$sut = new FizzBuzz; | |
$actual = $sut->translate(15); | |
$this->assertSame("FizzBuzz", $actual); | |
} | |
/** | |
* @test | |
*/ | |
public function _100回繰り返す_件数が正しい(): void | |
{ | |
$sut = new FizzBuzz; | |
$actual = $sut->run(); | |
$this->assertEquals(100, count($actual)); | |
} | |
/** | |
* @test | |
*/ | |
public function _100回繰り返す_インデックス値が正しい(): void | |
{ | |
$sut = new FizzBuzz; | |
$actual = $sut->run(); | |
$this->assertFalse(array_key_exists(-1, $actual)); | |
$this->assertTrue(array_key_exists(0, $actual)); | |
$this->assertTrue(array_key_exists(50, $actual)); | |
$this->assertTrue(array_key_exists(99, $actual)); | |
$this->assertFalse(array_key_exists(100, $actual)); | |
} | |
/** | |
* @test | |
*/ | |
public function _100回繰り返す_内容が正しい(): void | |
{ | |
$sut = new FizzBuzz; | |
$actual = $sut->run(); | |
$this->assertSame("1", $actual[ 1 - 1]); | |
$this->assertSame("2", $actual[ 2 - 1]); | |
$this->assertSame("Fizz", $actual[ 3 - 1]); | |
$this->assertSame("4", $actual[ 4 - 1]); | |
$this->assertSame("Buzz", $actual[ 5 - 1]); | |
$this->assertSame("29", $actual[ 29 - 1]); | |
$this->assertSame("FizzBuzz", $actual[ 30 - 1]); | |
$this->assertSame("31", $actual[ 31 - 1]); | |
$this->assertSame("Fizz", $actual[ 99 - 1]); | |
$this->assertSame("Buzz", $actual[100 - 1]); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment