為了要讓程式碼更簡潔、更容易懂、及更容易維護,
我們今天要開始將之前的測試程式重構,(雖然好像才剛開始寫)
我們原本是這樣
public function test_leapyear_check_four()
{
$response = $this->get('/getLeapYear/4');
$this->assertSame("閏年", $response->getContent());
}
public function test_leapyear_check_2020()
{
$response = $this->get('/getLeapYear/2020');
$this->assertSame("閏年", $response->getContent());
}
現在我們要合併成一個 test_leapyear_check_year 函式,
其中$input是輸入值,$output是輸出值
public function test_leapyear_check_year($input, $output)
{
}
然後我們加上註解,其中dataProvider是PHPUnit提供的方法,
代表我們的資料來源是從input_number這個函式而來
/**
* @param $input
* @param $output
* @dataProvider input_number
*/
public function test_leapyear_check_year($input, $output)
{
}
然後我們新增一個input_number函式
public function input_number()
{
}
這個函式回傳測試資料,
也就是剛才那兩個函式中的輸入和輸出資料
public function input_number()
{
return [
['4', '閏年'],
['2020', '閏年'],
];
}
然後把原本的測試函式內的內容Copy過來
/**
* @param $input
* @param $output
* @dataProvider input_number
*/
public function test_leapyear_check_year($input, $output)
{
$response = $this->get('/getLeapYear/4');
$this->assertSame("閏年", $response->getContent());
}
並且修改輸入和輸出資料
/**
* @param $input
* @param $output
* @dataProvider input_number
*/
public function test_leapyear_check_year($input, $output)
{
$response = $this->get("/getLeapYear/$input");
$this->assertSame($output, $response->getContent());
}
然後刪掉原本那兩個程式,
現在我們的PHP檔案的內容變成這樣
<?php
namespace Tests\Feature;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithFaker;
use Tests\TestCase;
class MyFirstUnitTest extends TestCase
{
/**
* A basic feature test example.
*
* @return void
*/
public function test_example()
{
$response = $this->get('/');
$response->assertStatus(200);
}
public function test_leapyear_return_200()
{
$response = $this->get('/getLeapYear/0');
$response->assertStatus(200);
}
/**
* @param $input
* @param $output
* @dataProvider input_number
*/
public function test_leapyear_check_year($input, $output)
{
$response = $this->get("/getLeapYear/$input");
$this->assertSame($output, $response->getContent());
}
public function input_number()
{
return [
['4', '閏年'],
['2020', '閏年'],
];
}
}
再執行一次測試
php vendor/phpunit/phpunit/phpunit tests/Feature/MyFirstUnitTest.php
果然是通過了,
這樣我們就完成了基本的重構。