欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

.Net使用Xunit工具進(jìn)行單元測(cè)試

 更新時(shí)間:2022年06月23日 17:10:07   作者:天方  
這篇文章介紹了.Net使用Xunit工具進(jìn)行單元測(cè)試的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

不管你愛(ài)與不愛(ài),單元測(cè)試對(duì)于一個(gè)軟件的長(zhǎng)治久安還是必不可少的一環(huán)。在Visual Studio 2012后,VS中的測(cè)試瀏覽器也能與第三方的集成了,用起來(lái)還是非常方便的。目前在.Net框架下的測(cè)試工具主要有Nunit、內(nèi)置的MSTest以及Xunit這三個(gè)工具,本文就簡(jiǎn)單的介紹一下如何在VS中使用XUnit這個(gè)測(cè)試框架的后起之秀。

安裝Xunit:

Xunit的安裝現(xiàn)在不需要插件支持了,直接使用NuGet安裝如下兩個(gè)庫(kù)即可:

PM> Install-Package xunit
PM> Install-Package xunit.runner.visualstudio -Pre (Visual Studio測(cè)試瀏覽器支持, VS2015目前必須裝Pre的)

編寫(xiě)測(cè)試用例:

一個(gè)簡(jiǎn)單的測(cè)試用例如下:

    public class TestClass1
    {
        [Fact]
        public void testMax()
        {
            Assert.Equal(3, Math.Max(3, 2));
        }

        [Fact]
        public void testFail()
        {
            Assert.Equal(2, Math.Max(3, 2));
        }
    }

執(zhí)行測(cè)試用例

在測(cè)試瀏覽器中執(zhí)行RunAll即可(修改后不用編譯,它會(huì)自動(dòng)編譯)

測(cè)試方式說(shuō)明:

聲明測(cè)試用例:

Xunit里面不需要TestClass之類(lèi)Attribute來(lái)標(biāo)記測(cè)試用例類(lèi),只需要滿足如下條件即可:

  • 測(cè)試類(lèi)必須是public的

  • 測(cè)試用例用FactAttribute標(biāo)記

斷言:

Assert類(lèi)用來(lái)驗(yàn)證測(cè)試測(cè)試函數(shù)的輸出結(jié)果。

Assert.Equal(3, Math.Max(3, 2));

也可以使用一些擴(kuò)展的斷言庫(kù),常用的就是xunit.should庫(kù),它是以擴(kuò)展函數(shù)的方式進(jìn)行驗(yàn)證,看起來(lái)更加舒服。

PM> Install-Package xunit.should
Math.Max(3, 2).ShouldBe(3);

不過(guò),這個(gè)庫(kù)和新版本的XUnit適配不是很好,我這里寫(xiě)了一個(gè)簡(jiǎn)單的版本: 

    static class AssertExtension
    {
        public static void ShouldBe<T>(this T value, T exprected)
        {
            if(Equals(value, exprected))
                return;

            var msg = $"與預(yù)期結(jié)果不一致,當(dāng)前值是 '{format(value)}', 期望值是 '{format(exprected)}'";
            throw new InvalidOperationException(msg);
        }

        public static void ShouldNotBe<T>(this T value, T notExprected)
        {
            if (!Equals(value, notExprected))
                return;

            var msg = $"與預(yù)期結(jié)果不一致,當(dāng)前值不應(yīng)該是 '{format(notExprected)}' ";
            throw new InvalidOperationException(msg);
        }

        static string format(object value)
        {
            return value == null ? "NULL" : value.ToString();
        }
    }

構(gòu)建和析構(gòu):

Xunit里面并不是通過(guò)SetUp和TearDown標(biāo)記來(lái)表明測(cè)試用例的構(gòu)建和析構(gòu)操作,它每次執(zhí)行測(cè)試用例的時(shí)候都會(huì)插件測(cè)試用例類(lèi),執(zhí)行完成后,如果其實(shí)現(xiàn)了IDispose接口,則會(huì)調(diào)用Dispose函數(shù),更加簡(jiǎn)潔明了。也就是說(shuō):

  • 在測(cè)試用例類(lèi)的構(gòu)造函數(shù)指向數(shù)據(jù)構(gòu)建操作

  • 在Dispose函數(shù)中指向數(shù)據(jù)清理操作

異常測(cè)試

Xunit并不是通過(guò)Attribute來(lái)標(biāo)記異常捕獲的,而是直接使用Assert.Throws斷言函數(shù)來(lái)驗(yàn)證異常。

    public class TestClass1
    {
        [Fact]
        public void testException()
        {
            Assert.Throws<InvalidOperationException>(() => operation());
        }

        void operation()
        {
            throw new InvalidOperationException();
        }
    }

更改測(cè)試用例名稱:

[Fact(DisplayName =?"Max函數(shù)測(cè)試")]

跳過(guò)測(cè)試用例:

[Fact(Skip ="重構(gòu)未完成")]

分組:

[Trait("Group",?"Category")]

到此這篇關(guān)于.Net使用Xunit工具進(jìn)行單元測(cè)試的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論