C#中MergeSort排序方法单元测试结果不符合预期如何排查解决
问题根因
你单元测试项目中定义了同名的Sort类,测试方法实例化的是测试项目本地的Sort类,调用的是该类下直接返回原输入的私有MergeSort方法,完全没有调用你实现了排序逻辑的业务类,因此返回值永远和输入一致。
修复步骤
- 给实现排序逻辑的业务类加上独立命名空间,避免类名冲突:
namespace SortCore { 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; } } }
- 单元测试项目先引用业务项目,再修改测试代码:删除测试类中冗余的MergeSort方法,明确指定调用业务类的排序方法:
namespace Sort_Test { [TestClass] public class SortTest { [TestMethod] public void MergeSortTesting() { // 明确调用业务项目的Sort类 SortCore.Sort sort = new SortCore.Sort(); string input = "dcba"; string output = sort.MergeSort(input); Assert.AreEqual("abcd", output); } } }
可选优化
你当前实现的排序逻辑是选择排序,并非归并排序,建议修改方法名避免歧义;也可以直接操作char数组简化代码:
public string SelectSort(string input) { char[] chars = input.ToCharArray(); for (int i = 0; i < chars.Length; i++) { for (int j = i; j < chars.Length; j++) { if (chars[i] > chars[j]) { char temp = chars[i]; chars[i] = chars[j]; chars[j] = temp; } } } return new string(chars); }
内容的提问来源于stack exchange,提问作者anony
相关产品推荐
相关产品推荐

