簡體   English   中英

如何在 C# 中進行單元測試

[英]How to unit test in C#

你好,我試圖在我的排序中進行測試

 public class Sort
        {
    public string MergeSort(string Word)
    {
       
        var tempLetter="";
        string arrangedSort = "";
        List<string> ListLetters = new List<string>();
        arrangedSort = "";
        for (int i = 0; i < Word.Length; i++)
        {
            ListLetters.Add(Word.Substring(i, 1));
        }
        for (int i = 0; i < Word.Length; i++)
        {
            for (int j = i; j < Word.Length; j++)
            {
                if (char.Parse(ListLetters[i]) > char.Parse(ListLetters[j]))
                {
                    tempLetter = ListLetters[i];
                    ListLetters[i] = ListLetters[j];
                    ListLetters[j] = tempLetter;
                }
            }
        }
        foreach (var listLetter in ListLetters)
        {
            arrangedSort += listLetter;
        }
        return arrangedSort;
    }
    }

這是我的單元測試

 namespace Sort_Test
{
    [TestClass]
    public class Sort
    {
        [TestMethod]
          
            public void MergeSortTesting()
            {
                Sort sort = new Sort();
                string input = "dcba";
                string output = sort.MergeSort(input);

                Assert.AreEqual("abcd", output);
            }

        private string MergeSort(string input)
        {
            return input;
        }
    }
}

但它沒有用,我可能知道它不起作用的原因是什么。 對不起 C# 初學者。 請幫助我代碼有什么問題? 我還嘗試搜索如何進行單元測試工作的解決方案,但我無法得到預期結果是 abcd 但在測試 dcba 中的解決方案。

在此處輸入圖片說明

首先,讓我們稍微清理一下類,刪除不需要的代碼。 代碼越少,以后需要閱讀和理解的代碼就越少。 在這種情況下,您根本不需要類。 好吧,C# 是一種 OOP 語言,迫使您違反原則將所有代碼放在一個類中,但它沒有狀態可以保存,因此它可以是一個靜態類。 靜態類不需要實例化,稍后您將看到。 此外,從字符串中獲取字符數組並將字符數組轉換為字符串也不是您必須手動完成的事情。 當你刪除所有這些東西時,你的算法變得更加清晰和簡潔。 我記得合並排序不同,但我猜這取決於你來弄清楚。

public static class SortAlgorithms
{
    public static string MergeSort(string word)
    {
       var listLetters = word.ToArray();

       for (int i = 0; i < listLetters.Length; i++)
       {
           for (int j = i; j < listLetters.Length; j++)
           {
               if (listLetters[i] > listLetters[j])
               {
                   var tempLetter = listLetters[i];
                   listLetters[i] = listLetters[j];
                   listLetters[j] = tempLetter;
               }
           }
       }

       return new string(listLetters);
    }
}

現在開始測試:由於我們將測試類重命名為不再與您的實際類沖突,並將輸出從 int 更改為 string,它實際上會編譯。 您也不再需要創建和初始化對象的這種繞道而行。

[TestClass]
public class SortAlgorithmTests
{
    [TestMethod]
    public void MergeSortTesting()
    {
        var input = "dcba";
        var output = SortAlgorithms.MergeSort(input);

        Assert.AreEqual("abcd", output);
    }
}

因為您沒有初始化Word並且,單元測試類必須與主類Sort具有不同的名稱。 並且不要忘記在單元測試類中的每個方法上的[TestMethod]
嘗試這個:

public class Sort
{

    public string Word { get; set; }

    public Sort(string word)
    {
        Word = word;
    }

    public string MergeSort()
    {
   
            var tempLetter = "";
            string arrangedSort = "";
           
        List<string> ListLetters = new List<string>();
            arrangedSort = "";
            for (int i = 0; i < Word.Length; i++)
            {
                ListLetters.Add(Word.Substring(i, 1)); 
            }
               for (int i = 0; i < Word.Length; i++)
                            {
                                for (int j = i; j < Word.Length; j++)
                                {
                                    if (char.Parse(ListLetters[i]) > char.Parse(ListLetters[j]))
                                    {
                                        tempLetter = ListLetters[i];
                                        ListLetters[i] = ListLetters[j];
                                        ListLetters[j] = tempLetter;
                                    }
                                }
                            }

                        
            foreach (var listLetter in ListLetters)
            {
                arrangedSort += listLetter;
            }
            return arrangedSort;
    }
}

然后在您的單元測試中:

[TestClass]
public class SortTests
{
    [TestMethod]
    public void MergeSortTesting()
    {
        var sort = new Sort("dcba");

        int result = sort.MergeSort();

        Assert.AreEqual("abcd", result);
    }
}

看看下面的代碼:

[TestClass]
public class UnitTest1
{
    [TestMethod]
    public void MergeSortTesting()
    {
        string input = "dcba";
        string output = Sort.MergeSort(input);

        Assert.AreEqual("abcd", output);

    }
}
class Sort
{
    public static string MergeSort(string Word)
    {
         ...        
    }
}

MergeSort方法設置為static ,不要新建Sort類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM