[Day 07] 简单的单元测试实作(一)

我们终於要开始实作我们的单元测试了,
首先我们先建立一个自己的测试案例
php artisan make:test MyFirstUnitTest
https://ithelp.ithome.com.tw/upload/images/20210908/20105694pfoCQPHTBs.png

我们发现在 /tests/Feature 资料夹多了一个 MyFirstUnitTest.php 档案,
https://ithelp.ithome.com.tw/upload/images/20210908/20105694UNSIFJ4ulk.png

内容如下:

<?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);
    }
}

这个测试的内容是我们去向首页请求,
期待能够回传200的Http状态,
当然如果我们的网站没有问题,
应该是要能够回传200没有错,
那我们就来做一下验证
https://ithelp.ithome.com.tw/upload/images/20210908/20105694CiGPy1E1F7.png

最後跑出来的结果也跟我们预期的一样,
是绿灯(代表通过),
如果我们把原来的程序改成这样

$response = $this->get('/');
$response->assertStatus(404);

可以预期地,
一定是会回传错误,
我们再来执行看看:
https://ithelp.ithome.com.tw/upload/images/20210908/20105694W66qpI2y7X.png

真的就变成红灯了,
错误讯息说

Expected status code 404 but received 200.

我们原本预期得到的状态是404,
但是却回传了200,
然後还告诉我们错误是在哪一行,
就是在MyFirstUnitTest.php的第20行。

这样子我们就可以透过PHPUnit来验证我们写的程序有没有问题。

所以我们现在开始来撰写自己的测试程序,
现在我们想要新增一个网页 /getLeapYear,
我们会传给他一个值,
然後得到一个回传值,
目前这个网页是不存在的,
所以应该会得到404的回传,
我们在我的们测试类别新增一个function,

public function test_leapyear_return_200()
{
    $response = $this->get('/getLeapYear');

    $response->assertStatus(200);
}

原本的那个范例改回来200

public function test_example()
{
    $response = $this->get('/');

    $response->assertStatus(200);
}

然後执行
php vendor/phpunit/phpunit/phpunit tests/Feature/MyFirstUnitTest.php
https://ithelp.ithome.com.tw/upload/images/20210908/20105694IwLjMqU8sr.png

我们来看看框框的地方

  1. .F 表示第一个测试成功、第二个测试失败(Fail)了,
  2. 失败的是 test_leapyear_return_200 这个函式
    原本预期要回传200,但是却回传了404(因为还没写)
  3. 发生错误是在MyFirstUnitTest.php的第27行
  4. 总共做了2个测试,失败了1个

到了这里,
我们终於成功地做了一个失败的单元测试,
(其实严格说来是成功,因为我们原本预期它就是会失败)

然後我们在web.php新增

Route::get('/getLeapYear', function() {
    return true;
});

然後执行
php vendor/phpunit/phpunit/phpunit tests/Feature/MyFirstUnitTest.php
https://ithelp.ithome.com.tw/upload/images/20210908/20105694nj0gXtWb6D.png

我们的第一个测试已经成功了!


<<:  [Day7]C# 鸡础观念- 你有选择障碍吗? 交给 if陈述式 解决吧!

>>:  电子书阅读器上的浏览器 [Day08] 调整网页字型

Day 1: 人工智慧在音乐领域的应用 (简介篇)

前言 人工智慧在音乐领域上个各种应用,实际上已经发展了许久。 这里面包括了AI作曲、AI伴奏、AI读...

Day05 建构Project(1)

折腾了三天,我们终於要开始正式学习Django了!各位想必都非常兴奋吧! 那现在我们就来进行一个专案...

沟通这回事:个人经验篇

前言 Hi,铁人赛第二天,跟大家聊聊沟通,预计会陆续写几篇相关的主题,今天来分享平时的观察。 在敏捷...

[Linux] 让程序在背景执行

订阅patreon即可看到更多文章 https://www.patreon.com/wade3c ...

Day28 - 储存帐密及自动登入

今天来做储存帐密和自动登入的功能。 提醒:今天的内容缺少了加密储存密码,是极度危险的功能,这部份预计...