Reqnroll初體驗

關於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;
        }
    }
}

跑完測試

元哥的筆記