t66y.buzz index.php,6.FizzBuzz
本系列文章為laracasts.com 的系列視頻教程——Code Katas in PHP 的學習筆記。若喜歡該系列視頻,可去該網站訂閱后下載該系列視頻,支持正版。
Kata 是一個簡短,可重復的編程挑戰,可以幫助我們進行快速地編程練習。
開發模型仍舊是 TDD(測試驅動開發),視頻中使用的是 phpspec 進行開發,筆記中使用了 Laravel 應用,因此代碼有不同。
本節說明
對應第 6 小節:FizzBuzz
本節內容
這一節我們的練習是 FizzBuzz 游戲。首先我們簡單了解下規則:寫一個程序按自然數的順序打印數字,但是在遇到 3 的倍數時用“fizz”替代數字,5 的倍數用“buzz”代替,既是 3 的倍數又是 5 的倍數打印“fizzbuzz”。我們來開始練習:
$ php artisan make:test FizzBuzzTest --unit
添加第一個測試:
namespace Tests\Unit;
use Tests\TestCase;
use App\FizzBuzz;
class FizzBuzzTest extends TestCase
{
public function setUp()
{
parent::setUp();
$this->fizzbuzz = new FizzBuzz();
}
/** @test */
public function it_translate_1_for_fizzbuzz()
{
$this->assertEquals($this->fizzbuzz->execute(1),1);
}
}
運行測試:
我們來讓測試通過:
app\FizzBuzz.php
namespace App;
class FizzBuzz
{
public function execute($number)
{
return $number;
}
}
再次測試:
向前推進:
.
.
/** @test */
public function it_translate_2_for_fizzbuzz()
{
$this->assertEquals($this->fizzbuzz->execute(2),2);
}
}
運行測試:
測試通過,所以我們繼續向前推進:
.
.
/** @test */
public function it_translate_3_for_fizzbuzz()
{
$this->assertEquals($this->fizzbuzz->execute(3),'fizz');
}
}
我們來讓測試通過:
app\FizzBuzz.php
namespace App;
class FizzBuzz
{
public function execute($number)
{
if($number % 3 == 0) return 'fizz';
return $number;
}
}
再次測試:
繼續向前推進:
.
.
/** @test */
public function it_translate_5_for_fizzbuzz()
{
$this->assertEquals($this->fizzbuzz->execute(5),'buzz');
}
}
運行測試:
我們來讓測試通過:
namespace App;
class FizzBuzz
{
public function execute($number)
{
if($number % 5 == 0) return 'buzz';
if($number % 3 == 0) return 'fizz';
return $number;
}
}
運行測試:
向前推進:
.
.
/** @test */
public function it_translate_6_for_fizzbuzz()
{
$this->assertEquals($this->fizzbuzz->execute(6),'fizz');
}
}
運行測試:
測試通過,所以我們繼續推進:
.
.
/** @test */
public function it_translate_10_for_fizzbuzz()
{
$this->assertEquals($this->fizzbuzz->execute(10),'buzz');
}
}
運行測試:
繼續推進:
.
.
/** @test */
public function it_translate_15_for_fizzbuzz()
{
$this->assertEquals($this->fizzbuzz->execute(15),'fizzbuzz');
}
}
運行測試:
我們來讓測試通過:
namespace App;
class FizzBuzz
{
public function execute($number)
{
if($number % 15 == 0) return 'fizzbuzz';
if($number % 5 == 0) return 'buzz';
if($number % 3 == 0) return 'fizz';
return $number;
}
}
運行測試:
現在我們的三條規則已經測試完畢,為了保險起見,我們可以多做幾個隨機測試:
.
.
/** @test */
public function it_translate_123_for_fizzbuzz()
{
$this->assertEquals($this->fizzbuzz->execute(123),'fizz');
}
/** @test */
public function it_translate_150_for_fizzbuzz()
{
$this->assertEquals($this->fizzbuzz->execute(150),'fizzbuzz');
}
}
運行測試:
現在我們只用添加一個方法,將轉換后的結果組合起來即可:
.
.
/** @test */
public function it_translate_a_sequence_of_number_for_fizzbuzz()
{
$this->assertEquals(
$this->fizzbuzz->executeUpTo(10),
[1,2,'fizz',4,'buzz','fizz',7,8,'fizz','buzz']
);
}
}
代碼實現很簡單:
.
.
public function executeUpTo($number)
{
$output = [];
foreach (range(1,$number) as $i)
{
$output[] = $this->execute($i);
}
return $output;
}
}
運行測試:
總結
以上是生活随笔為你收集整理的t66y.buzz index.php,6.FizzBuzz的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: wordpress怎么打开php网站,w
- 下一篇: java 数组练习题,Java练习题 -