iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 13
0
Modern Web

零經驗ASP .NET Core 30 DAY全紀錄系列 第 13

零經驗 .NET Core 30 DAY----- Day13 NUnit進行C#單元測試(二)

  • 分享至 

  • xImage
  •  

鄉親們晚安,今天要接續昨天的主題用NUnit進行C#單元測試,我會照著昨天把昨天(DAY12)參考網址裡的內容繼續照做到完,再自己動手把IsPrime()完成,做測試,那麼開始。

將昨天的ithelp_IsPrimeShould.cs改成下面的程式碼。

using NUnit.Framework;
using ithelp;

namespace Prime.UnitTests.Services
{
    [TestFixture]
    public class ithelp_IsPrimeShould
    {
        private Class1 _primeService;

        [SetUp]
        public void SetUp()
        {
            _primeService = new Class1();
        }

        [Test]
        public void IsPrime_InputIs1_ReturnFalse()
        {
            var result = _primeService.IsPrime(1);

            Assert.IsFalse(result, "1 should not be prime");
        }
    }
}

dotnet test後的結果
https://ithelp.ithome.com.tw/upload/images/20200919/20130030Lix8woIlMl.png
接下來更改ithelp中的IsPrime()

public bool IsPrime(int candidate)
{
    if (candidate == 1)
    {
        return false;
    }
    throw new NotImplementedException("Please create a test first.");
}

dotnet test後的結果
https://ithelp.ithome.com.tw/upload/images/20200919/20130030d5RxTpW90w.png


Ok好那接下來我來試試自己做看看

  • [TestFixture] 屬性代表包含單元測試的類別。
  • [Test] 屬性指出方法是測試方法。
  • [TestCase(value)]屬性可以設定測試數值
  • IsFalse(parameter) 值應為false
  • IsFalse(parameter) 值應為true
  • AreEqual(a,b)比較a,b兩者是否相等

將ithelp_IsPrimeShould.cs改成

using NUnit.Framework;
using ithelp;

namespace Prime.UnitTests.Services
{
    [TestFixture]
    public class ithelp_IsPrimeShould
    {
        private Class1 _primeService;

        [SetUp]
        public void SetUp()
        {
            _primeService = new Class1();
        }

        [Test]
	    [TestCase(5)]
    	[TestCase(-0)]
    	[TestCase(1)]
        public void IsPrime_InputIs1_ReturnFalse(int i)
        {
            var result = _primeService.IsPrime(i);
            Assert.IsFalse(result, "1 should not be prime");
        }
    }
}

放入三筆測資[TestCase(5)]、[TestCase(-0)]、[TestCase(1)]
因為只有1有正確的reture(false) ,dotnet test後的結果
https://ithelp.ithome.com.tw/upload/images/20200919/201300306rKCP8T8V8.png


接下來更改ithelp.cs中的IsPrime()

public bool IsPrime(int candidate){
    if (candidate == 0 || candidate == 1)
    {
        return false;
    } else
{
    for (int a = 2; a <= candidate / 2; a++)
    {
        if (candidate % a == 0)
        {
            return false;
        }
    }
    return true;
}
    throw new NotImplementedException("Please create a test first.");
}

將ithelp_IsPrimeShould.cs改成

using NUnit.Framework;
using ithelp;

namespace Prime.UnitTests.Services
{
    [TestFixture]
    public class ithelp_IsPrimeShould
    {
        private Class1 _primeService;

        [SetUp]
        public void SetUp()
        {
            _primeService = new Class1();
        }

        [Test]
	    [TestCase(5)]
    	[TestCase(2)]
    	[TestCase(3)]
        public void IsPrime_InputIs1_ReturnFalse(int i)
        {
            var result = _primeService.IsPrime(i);

            Assert.IsTrue(result, "is prime");
        }
    }
}

dotnet test後的結果
https://ithelp.ithome.com.tw/upload/images/20200919/20130030bx6DPlKOeZ.png


如果增加[TestCase(1)]
dotnet test後的結果
https://ithelp.ithome.com.tw/upload/images/20200919/201300303tlCgrzRAF.png


DAY13心得:
明天會把進度拉回主線,繼續做座位管理系統的功能,有甚麼新學的東西也會繼續更新,那麼~晚安~


上一篇
零經驗 .NET Core 30 DAY----- Day12 NUnit進行C#單元測試
下一篇
零經驗 .NET Core 30 DAY----- Day14 規劃中,還未完成的部分
系列文
零經驗ASP .NET Core 30 DAY全紀錄30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言