iT邦幫忙

2021 iThome 鐵人賽

DAY 4
1
Software Development

單元測試從入門到進階之路 (以 C# NUnit 3 X NSubstitute 為例)系列 第 4

Day 4-Visual Studio 環境安裝與介紹第一隻測試專案 HelloBank (基礎-3)

  • 分享至 

  • xImage
  •  

工欲善其事,必先利其器—該先裝 Visual Studio 了

今天的內容會開始介紹我們要使用的整合開發環境 — Visual Studio,在維基百科是這樣簡述 Visual Studio:Microsoft Visual Studio(視覺工作室,簡稱 VS 或 MSVS)是微軟公司的開發工具套件系列產品。VS 是一個基本完整的開發工具集,它包括了整個軟體生命週期中所需要的大部分工具,如 UML 工具、程式碼管控工具、整合開發環境(IDE)等等。也是做為我目前工作系統的開發工具。以下用引用其他 Youtuber 的教學影片分別教學如何在 Windows 與 Mac 作業系統上安裝。

Windows:Visual Studio 2022 | Download & Installation
Mac:How To Install Visual Studio for Mac | Install Visual Studio on macOS


Hello Bank 的「商業邏輯」專案內容與測試方向

做為本系列第一次寫測試的專案,採用 .NET Standard 2.1 框架且不引入任何第三方套件做為本次的測試專案兼範例,而系統功能主題為銀行帳戶 (Account)。銀行帳戶本身帶有的屬性就是餘額 (Balance);而銀行帳戶類別建構子提供了兩種方式:有提供餘額跟未提供餘額,未提供餘額皆預設帳戶餘額為零元;最後是商業邏輯方法,因重點在於如何撰寫單元測試,因此此專案僅列出象徵性的功能:存款 (Add)、取款 (Withdraw) 與轉帳 (TransferFundsTo)。

https://ithelp.ithome.com.tw/upload/images/20210904/20127378LUDLXAa7xg.png

而後本系列開發的專案,為了保持一致的程式風格,會統一屬性、建構子與商業邏輯撰寫方式

屬性:
private double balance;

public double Balance
{
    get { return balance; }
}
建構子:
public BankAccount()
{

}

public BankAccount(double balance)
{
    this.balance = balance;
}
商業邏輯方法:
public void Add(double amount)
{
    if (amount < 0)
    {
        throw new ArgumentOutOfRangeException(nameof(amount));
    }

    balance += amount;
}

另一方面,單元測試的程式風格如下:

[Test]
public void Adding_Funds_Updates_Balance()
{
    // Arrange
    account = new BankAccount(1000);

    // Act
    account.Add(500);

    // Assert
    Assert.AreEqual(1500, account.Balance);
}

PS:而後都是依照 3A 原則:Arrange -> Act -> Assert,明天 Day 5 會介紹 3A 原則。


最後提供 Hello Bank Startup 的連結:https://github.com/SunShineYen/HelloBank (可先測試專案是否可以編譯,又試著利用 IDE 跑測試)

Hello Bank 的內容是參考於 MatthiWare 的教學影片:https://www.youtube.com/c/MatthiWare/search?query=NUnit


上一篇
Day 3-何時用單元測試?在這之前,要先釐清除了單元測試以外的測試 (基礎-2)
下一篇
Day 5-單元測試 3A 原則 (Arrange, Act 和 Assert) (基礎-4)
系列文
單元測試從入門到進階之路 (以 C# NUnit 3 X NSubstitute 為例)30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言