使用dotnet命令行進行.netcore單元測試

.Netcore很快到2了,各類周邊的配套也不斷的完善,爲了跨平臺,微軟也是至關的有誠意,不少功能不在須要綁定宇宙第一編輯器了。本文以單元測試爲例,講述利用dotnet命令行建立單元測試的全過程。windows

安裝環境

由於不想使用VS這個龐然大物,安裝的時候,選擇單獨安裝包,Windows下直接下載安裝文件,安裝就好啦。打開命令行輸入dotnet --version,就會看到剛剛安裝的版本號,安裝完畢。編輯器

建立項目

我的喜愛,爲了代碼整潔,會單獨建一個測試項目,所以這裏須要至少兩個項目 首先建立一個項目根文件夾:函數

mkdir ut

進入根文件夾,建立庫類型的項目:單元測試

dotnet new classlib -n PrimeService

再建立測試項目:測試

dotnet new mstest -n PrimeService.MSTests

目前命令行支持建立xunit和MSTest兩種類型的測試項目,這裏選擇MSTest類型的測試spa

在PrimeService.MSTests項目下PrimeService.MSTest.csproj的文件裏增長對PrimeService項目的依賴命令行

<ItemGroup>
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.0.0" />
    <PackageReference Include="MSTest.TestAdapter" Version="1.1.11" />
    <PackageReference Include="MSTest.TestFramework" Version="1.1.11" />
    <PackageReference Include="System.Text.Encoding.CodePages" Version="4.3.0" />
    <ProjectReference Include="..\PrimeService\PrimeService.csproj" />
  </ItemGroup>

編寫功能

按照測試驅動開發的通常流程,進入PrimeService項目,把Class1.cs文件改爲Prime.cs,代碼以下:rest

using System;

namespace PrimeService
{
    public class Prime
    {
        
        public bool IsPrime(int candidate) 
        {
            throw new NotImplementedException("Please create a test first");
        }
    }
}

先不用實現IsPrime方法,寫對應的測試代碼,進入PrimeService.MSTests項目,修改UnitTest1.cs文件的代碼以下:code

using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace PrimeService.MSTest
{
    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void TestMethod1()
        {
            var _prime = new PrimeService.Prime();
            int value = 2;
            var result = _prime.IsPrime(value);
            Assert.IsTrue(result);
        }
    }
}

在PrimeService.MSTest根目錄下,運行:ssl

dotnet restore
dotnet test

正常狀況下,不出意外會輸出以下測試結果:

System.NotImplementedException: Please create a test first
堆棧跟蹤:
測試運行失敗。
    at PrimeService.Prime.IsPrime(Int32 candidate) in C:\devs\dot\ut\PrimeService\Pri
me.cs:line 10
   at PrimeService.MSTest.UnitTest1.TestMethod1() in C:\devs\dot\ut\PrimeService.MSTe
st\UnitTest1.cs:line 13


總測試: 1。已經過: 0。失敗: 1。已跳過: 0。
測試執行時間: 1.0572 秒

若是發現控制檯輸出中文亂碼,那是由於codepage不對,默認的codepage是65001,而中文版Windows的默認codepage是936,爲此,能夠暫時把命令行的codepage切換成65001, 命令以下:

chcp 65001

實現功能

修改IsPrime函數,實現完整的功能:

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

            for (var divisor = 2; divisor <= Math.Sqrt(candidate); divisor++) 
            { 
                if (candidate % divisor == 0) 
                { 
                    return false; 
                } 
            } 
            return true;  
        }

再次在測試項目下運行dotnet test,測試經過。

相關文章
相關標籤/搜索