Skip to content

Instantly share code, notes, and snippets.

@yattom
Created June 1, 2018 04:03
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 yattom/a8f6828fd49084e309e98e34c01c0ecb to your computer and use it in GitHub Desktop.
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)
<?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;
}
}
<?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;
}
}
<?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