AY寫給國人的教程- VS2017 Live Unit Testing[1/2]-C#人愛學不學-aaronyang技術分享

原文: AY寫給國人的教程- VS2017 Live Unit Testing[1/2]-C#人愛學不學-aaronyang技術分享

謝謝你們觀看-AY的 VS2017推廣系列
html

Live Unit Testing工具

AY當前VS的版本---- 15.7.1post

image.png

目前從15.3版本開始,就開始支持.net core的,網上不少資料都是舊的
單元測試


建立空解決方案UtilityLibraries測試

添加一個 .NET Standard庫
ui

image.png

添加類StringLibrarythis

C#
using System;

namespace UtilityLibraries
{
    public static class StringLibrary
    {
        public static bool StartsWithUpper(this string s)
        {
            if (String.IsNullOrWhiteSpace(s))
                return false;

            return Char.IsUpper(s[0]);
        }

        public static bool StartsWithLower(this string s)
        {
            if (String.IsNullOrWhiteSpace(s))
                return false;

            return Char.IsLower(s[0]);
        }

        public static bool HasEmbeddedSpaces(this string s)
        {
            if (String.IsNullOrWhiteSpace(s))
                return false;

            foreach (var ch in s.Trim())
            {
                if (ch == ' ')
                    return true;
            }
            return false;
        }
    }
}

是否大寫開頭,是否小寫開頭,是否包含空格
編碼

從新生成解決方案。spa

添加 core的 測試項目 StringLibraryTests.net

image.png

點擊肯定

而後  右鍵依賴項,添加引用

image.png

修改默認測試代碼:

C#
using Microsoft.VisualStudio.TestTools.UnitTesting;
using UtilityLibraries;
using System;

namespace StringLibraryTests
{
    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void TestStartsWithUpper()
        {
            // Tests that we expect to return true.
            string[] words = { "AaronYang", "Zebra", "ABC", "Αθήνα", "Москва" };
            foreach (var word in words)
            {
                bool result = word.StartsWithUpper();
                Assert.IsTrue(result,
                              $"Expected for '{word}': true; Actual: {result}");
            }
        }

        [TestMethod]
        public void TestDoesNotStartWithUpper()
        {
            // Tests that we expect to return false.
            string[] words = { "alphabet", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство",
                               "1234", ".", ";", " " };
            foreach (var word in words)
            {
                bool result = word.StartsWithUpper();
                Assert.IsFalse(result,
                               $"Expected for '{word}': false; Actual: {result}");
            }
        }

        [TestMethod]
        public void DirectCallWithNullOrEmpty()
        {
            // Tests that we expect to return false.
            string[] words = { String.Empty, null };
            foreach (var word in words)
            {
                bool result = StringLibrary.StartsWithUpper(word);
                Assert.IsFalse(result,
                               $"Expected for '{(word == null ? "<null>" : word)}': " +
                               $"false; Actual: {result}");
            }
        }

    }
}


因爲單元測試代碼包含一些非 ASCII 字符,所以 Visual Studio 顯示如下對話框來警告咱們,若是以其默認的 ASCII 格式保存文件,某些字符將會丟失。 選擇「以其餘編碼保存」按鈕。

Unicode (UTF-8 無簽名) - 代碼頁 6500



單擊 菜單欄

image.png

單擊啓動

image.png



image.png

測試資源管理器,列出結果,綠色√號,表明經過,測試結果和 代碼覆蓋率測試,覆蓋到的代碼,在對應的類中,走過的路徑都是√號標記,沒有覆蓋的代碼,用藍色的 - 號標記

image.png


單擊方法前面的 √號,還會列出 覆蓋過這個 方法的  測試方法名。

image.png

單擊return Char.IsUpper(s[0]); 前面的√   同理,這裏只有2個測試方法 覆蓋到這裏

image.png


增長代碼繼續測試

C#
[TestMethod]
        public void TestStartsWithLower()
        {
            // Tests that we expect to return true.
            string[] words = { "alphabet", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство" };
            foreach (var word in words)
            {
                bool result = word.StartsWithLower();
                Assert.IsTrue(result,
                              $"Expected for '{word}': true; Actual: {result}");
            }
        }

        [TestMethod]
        public void TestDoesNotStartWithLower()
        {
            // Tests that we expect to return false.
            string[] words = { "Alphabet", "Zebra", "ABC", "Αθήνα", "Москва",
                       "1234", ".", ";", " "};
            foreach (var word in words)
            {
                bool result = word.StartsWithLower();
                Assert.IsFalse(result,
                               $"Expected for '{word}': false; Actual: {result}");
            }
        }

而後Ctrl+S保存,發現自動運行測試了


切換到 測試的類,已經 覆蓋過這些代碼, 覆蓋過,就是說明,代碼被使用了,有意義的代碼。

image.png

目前爲止的代碼都是成功的,添加一個失敗的。


image.png

切換到被測試的類,鼠標移到X上,顯示,代碼被1 覆蓋過了,說面測試是走到這裏的。

image.png

單擊方法名,那行的X,而後單擊,測試方法,而後單擊,最後1個 調試所選項

image.png

image.png

表示 第一個短語  致使報錯

image.png

除此以外,咱們還有一些幫助工具,能夠幫咱們調試

image.pngimage.png

image.png

打開之後

image.png

從自動窗口,發現phrase 變量值 "Name\tDescription"  該字符串沒有包含空格,因此返回false,

它認爲嵌入的空格是U+0020。 可是,Unicode 標準包含許多其餘空格字符。 這代表庫代碼對空格字符進行了錯誤的測試。

修改代碼:   if (Char.IsWhiteSpace(ch))

image.png

OK了,到目前爲止,剛剛入門 實時自動測試知識

image.png


====================www.ayjs.net       楊洋    wpfui.com        ayui      ay  aaronyang=======請不要轉載謝謝了。=========


推薦您閱讀更多有關於「vs2017,」的文章

相關文章
相關標籤/搜索