在 PHP, 常用的有 PHPUnit, PHPSpec, Behat
在 .NET 常用的有 MS Test, NUnit, SpecFlow
先說 PHP 的部分, 最近會常接觸到 PHPUnit 是因為在開發 Laravel 的專案, 本身就整合了 PHPUnit, 不需太多的設定, 就可以立刻起步
PHPSpec 比較偏需求導向, 也就是常說的 BDD - 行為趨動開發
跟 PHPUnit 一樣有紅燈, 綠燈, 但有一點我覺得蠻好玩的是它會用互動的方式來幫助我產生需要的程式片斷
至於 Behat, 剛開始對於它的 feature 檔案設定感到很陌生, 但是因為是以使用者的角度來做開發需求, 而且在對應測試的方法, 只要有定義的步驟, 全都會相應到. 沒有對應到的步聚在執行 behat 一樣會產生對應的程式片段, 要求加在測試檔中, 減少拼命 key 鍵盤的刻檔. 在測試檔中不會特別去看到輸入的參數值, 跟 PHPUnit 及 PHPSpec 的測試方法又有些許不同, 蠻有趣的.
.NET 的部分, MS Test 是內建, 開發 ASP.NET MVC 專案時可一併加入 Unit Test 專案, 測試把握3A 原則 - Arrange, Act, Assert.
NUnit 我沒有特別去實作, 每個專案要去加上 NUnit Test Adapter 的套件, 不過大致上使用跟 MS Test 類似
會去玩 SpecFlow 也是因為玩了 Behat 之後, 覺得開發流程很有趣, 因此特別來研究一下在 Visual Studio 上如何去使用 SpecFlow
SpecFlow & Behat
SpecFlow (For .NET) 及 Behat (For PHP) 有個共通點, 都是以 Cucumber 為基礎的 BDD 工具, 描述測試的檔案都是 *.feature
常游走在兩個 Framework 中間, 有共通的語言很重要 :)
*.feature 是用 Gherkin 語法來描述
用預設英文的描述範例:
Feature: Calculator
In order to avoid silly mistakes
As a math idiot
I want to be told the sum of two numbers
Scenario: Add two numbers
Given I have entered 50 into the calculator
And I have entered 70 into the calculator
When I press add
Then the result should be 120 on the screen
也可以用其他語言來描述:
只要在第一行加註-- #language: zh-TW 即可用繁中來寫功能描述檔
#language: zh-TW
功能: 加總器
加總所有數字
取得加總後的總合
場景: 加總兩位數字
假設 輸入數字 50
並且 輸入數字 70
當 按下加總按鈕
那麼 得到加總後的的總合 120
測試的程式大概長這樣, 這裡用 C# - SpecFlow + MS Test 為範例
可利用規格來幫忙產出, 只要去做對應的實作方法出來
[Binding]
public class 加總器Steps
{
private Calculator calculator = new Calculator();
[Given(@"輸入數字 (.*)")]
public void 假設輸入數字(int number)
{
calculator.AddNumber(number);
}
[When(@"按下加總按鈕")]
public void 當按下加總按鈕()
{
calculator.DoCalculation();
}
[Then(@"得到加總後的的總合 (.*)")]
public void 那麼得到加總後的的總合(int result)
{
Assert.AreEqual(result, calculator.Total);
}
}
而測試的主物件程式 Calculator 長這個樣子
public class Calculator
{
private List numbers = new List();
public int Total { get; private set; }
public void AddNumber(int number)
{
this.numbers.Add(number);
}
public void DoCalculation()
{
this.Total = 0;
foreach (int number in numbers)
{
this.Total += number;
}
}
}
在 Visual Studio 執行測試的結果~ 綠燈! 很好~~~
用描述規格的方法來達到測試的目的, 一方面讓各班人馬容易確認規格, 二方面又可以達到測試驗收的目的
以上是用 Visual Studio 來實作 SpecFlow 及 MSTest 的整合
而在 PHP, 可以用 Behat 搭配 PHPUnit 來完成
目前還在熟悉 BDD 的測試流程及工具的操作流程, 改天再來發實作篇吧!
[2016/7/10] 實作 Demo 篇:
[PHP Demo - Behat + PHPUnit] - https://github.com/onecentlin/php-bdd-behat-demo
沒有留言:
張貼留言