關於Spec
先設定好UTF8,不然跑Reqnroll會爆錯
https://dowyuu.github.io/program/2022/04/07/Visual-Studio-file-encode/
筆者最近嘗試使用Reqnroll試寫了一個簡單範例,做為記錄。
Given-When-Then用來編寫測試場景的標準語法。它的目的在於讓開發人員、測試人員和非技術人員之間更容易溝通需求和預期的結果。
Given(前置條件):描述測試開始之前的狀態或背景條件。它確保系統在已知的狀態下開始進行測試。
- 例子:
Given 使用者已登入
When(行為或動作):描述在此場景中執行的操作或觸發的事件。這通常是測試的主體,表示使用者在系統上做了什麼。
- 例子:
When 使用者點擊 "儲存" 按鈕
Then(預期結果):描述操作完成後的預期結果或系統的反應。這部分用來驗證系統的行為是否符合需求。
- 例子:
Then 系統顯示 "儲存成功" 的訊息
手首先先編寫
Feature: 四則運算
Scenario: 兩個數字相加
Given 第一個數是 50
And 第二數字是 70
When 兩數相加
Then 結果應該是 120
Scenario: 兩個數字相減
Given 第一個數是 80
And 第二數字是 70
When 兩數相減
Then 結果應該是 10
Scenario: 兩個數字相乘
Given 第一個數是 8
And 第二數字是 5
When 兩數相乘
Then 結果應該是 40
Scenario: 兩個數字相除
Given 第一個數是 40
And 第二數字是 5
When 兩數相除
Then 結果應該是 8
並開始Define Step與編寫程式
using System;
using Reqnroll;
namespace ReqnrollProject1.StepDefinitions
{
[Binding]
public class 四則運算StepDefinitions
{
[Given("第一個數是 {int}")]
public void Given第一個數是(int p0)
{
throw new PendingStepException();
}
[Given("第二數字是 {int}")]
public void Given第二數字是(int p0)
{
throw new PendingStepException();
}
[When("兩數相加")]
public void When兩數相加()
{
throw new PendingStepException();
}
[Then("結果應該是 {int}")]
public void Then結果應該是(int p0)
{
throw new PendingStepException();
}
[When("兩數相減")]
public void When兩數相減()
{
throw new PendingStepException();
}
[When("兩數相乘")]
public void When兩數相乘()
{
throw new PendingStepException();
}
[When("兩數相除")]
public void When兩數相除()
{
throw new PendingStepException();
}
}
}
using System;
using Reqnroll;
using FluentAssertions;
using Xunit;
namespace ReqnrollProject1.StepDefinitions
{
[Binding]
public class 四則運算StepDefinitions
{
private Calculator _calculator = new Calculator();
private int _result;
private int _firstNumber;
private int _secondNumber;
[Given("第一個數是 {int}")]
public void Given第一個數是(int firstNumber)
{
_firstNumber = firstNumber;
}
[Given("第二數字是 {int}")]
public void Given第二數字是(int secondNumber)
{
_secondNumber = secondNumber;
}
[When("兩數相加")]
public void When兩數相加()
{
_result = _calculator.Add(_firstNumber, _secondNumber);
}
[When("兩數相減")]
public void When兩數相減()
{
_result = _calculator.Subtract(_firstNumber, _secondNumber);
}
[When("兩數相乘")]
public void When兩數相乘()
{
_result = _calculator.Multiply(_firstNumber, _secondNumber);
}
[When("兩數相除")]
public void When兩數相除()
{
_result = _calculator.Divide(_firstNumber, _secondNumber);
}
[Then("結果應該是 {int}")]
public void Then結果應該是(int result)
{
_result.Should().Be(result);
}
}
}
編寫試算Calculator 類別
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ReqnrollProject1
{
public class Calculator
{
public int Add(int a, int b)
{
return a + b;
}
public int Subtract(int a, int b)
{
return a - b;
}
public int Multiply(int a, int b)
{
return a * b;
}
public int Divide(int a, int b)
{
return a / b;
}
}
}
跑完測試
元哥的筆記