如何在 C# 中进行单元测试

ano*_*ony 2 c# unit-testing mstest visual-studio

您好,我正在尝试按我的方式进行测试

 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;
    }
    }
Run Code Online (Sandbox Code Playgroud)

这是我的单元测试

 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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但它不起作用,我知道它不起作用的原因是什么。抱歉,c# 初学者。请帮我看看代码有什么问题吗?我还尝试搜索如何进行单元测试工作的解决方案,但我无法获得预期结果为 abcd 但在测试 dcba 中的解决方案。

在此输入图像描述

nvo*_*igt 6

首先,让我们稍微清理一下你的类,删除不需要的代码。代码越少,后面需要阅读和理解的代码就越少。在这种情况下,您根本不需要上课。嗯,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);
    }
}
Run Code Online (Sandbox Code Playgroud)

现在进行测试:由于我们重命名了测试类,使其不再与实际类冲突,并将输出从 int 更改为 string,因此它实际上会编译。您也不再需要创建和初始化对象的绕道。

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

        Assert.AreEqual("abcd", output);
    }
}
Run Code Online (Sandbox Code Playgroud)