初入NUnit

在目前公司的開發流程中,測試階段都是人工去測試,但用人工測不但耗時外,還有可能會有疏漏。若每次調整程式時都要人工測試是否有影響到其他功能,累積下來花費的時間很可觀。若能使用自動測試的話,不但可以節省測試花費的時間,還能確保程式的品質。

參考微軟官方文件余小章的文章後,我試著實作。

首先建一個class project作為單元測試對象

    public class PrimeService
    {
        public bool IsPrime(int candidate)
        {
            if (candidate < 2)
            {
                return false;
            }

            if (candidate == 2)
            {
                return true;
            }

            throw new NotImplementedException("Please create a test first.");
        }
    }

 

接著開始撰寫單元測試的程式,微軟文件中建議測試function的命名可以分成三塊:被測試的function名稱、測試案例以及期望的結果

以2測試,期望回傳的結果是true

        [Test]
        public void IsPrime_InputIs2_ReturnTrue()
        {
            var result = _primeService.IsPrime(2);

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

參數也能直接寫在Attribute上,這樣就能用同一個測試方法傳入不同的案例做測試,這次傳入幾個小於2的數字,期望得到false的結果

        [TestCase(-1)]
        [TestCase(0)]
        [TestCase(1)]
        public void IsPrime_InputLessThan2_ReturnFalse(int value)
        {
            var result = _primeService.IsPrime(value);

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

另外還能測試程式是否有如預期拋出exception

        [TestCase(3)]
        public void IsPrime_InputGreaterThan2_ReturnNotImplement(int value)
        {
            var actual = Assert.Catch<NotImplementedException>(() => _primeService.IsPrime(value));

            StringAssert.Contains("Please create a test first.", actual.Message);
        }

最後測試結果:

 

自動測試比自己人工測方便太多了,接下來我會先拿我維護的系統試著加入NUnit,節省日後增修後測試花費的時間。

完整程式: https://github.com/bigshawn1478/NUnitPractice_IsPrime