-->
顯示具有 Testing 標籤的文章。 顯示所有文章
顯示具有 Testing 標籤的文章。 顯示所有文章

2020/10/26

軟體測試的經驗分享

最近同事在拼 unit test,就將以前撰寫測試的一些經驗整理出來分享。 

我不是專業的測試工程師,只是好死不死需要自幹 unit test,簡報中若有錯誤或是過時的地方,歡迎留言討論。整理後一起更新到簡報上!


以下做一些筆記:
  • s7:現在比較沒特別在分白箱和黑箱了,比較篇方法,如:TDD
  • s16:測試不只要用正確的資料做測試,也要拿錯誤的資料來跑
  • s25:每個 test framework or library 都有各自的特色,挑需要、順手的使用即可
  • s66:不要把測試搞得太複雜啊,到最後還要為測試程式建立另外的測試 XD
  • s68:不管是原始碼或是測試,都是越簡單越不容易出錯
  • s69:Google 這邊有篇「撰寫無法測試的程式」可參考
  • s80:SOLID 僅是用於物件導向程式語言;方法可參考但不一定要完全遵守
  • 公司在找工程師 XD

2019/06/28

注意 PHPUnit 的 fixture 行為

理論上,各個 test case 不應該互相影響,所以 PHPUnit 設計的 fixtures 像是 setUp() 和 tearDown() 都會在各個 test case 前後執行。

簡單做個測試:
<?php

use PHPUnit\Framework\TestCase;

class LibTest extends TestCase
{
    public function setUp(): void
    {
        $this->data = null;
    }

    public function tearDown(): void
    {
        $this->data = null;
    }

    public function testOne()
    {
        $this->data = 123;
        $this->assertEquals(123, $this->data);

        return $this->data;
    }

    /**
     * @depends testOne
     */
    public function testTwo($data)
    {
        $this->assertEquals(123, $this->data);
    }
}

// -----

PHPUnit 8.2.3 by Sebastian Bergmann and contributors.

.F

即使在 test case 加上 @depends 標記,fixture 也會運作,所以若是要讓下一個 test case 繼續使用的測試值,都必須用 return 的方式傳值。

----

另外,Laravel 提供的 testing tools 也有相同的行為。例如:「RefreshDatabase」,在 test case 執行結束以後就會把資料清空,因此如果要對 DB 做多像檢查,就必須在同一個 test case 中建立多個 assertions (個人不喜歡這樣做),不然即使加上 @depends,DB 中的資料也會被 refresh 掉。