如何编写单元测试方法?

时间:2014-04-24 07:05:40

标签: asp.net unit-testing c#-4.0

我是单位测试方法的新手。那么,可以为我指定下面代码的单元测试方法吗?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using TIPWebITLibrary.DAL;

 public class SearchInfo : IDisposable
    {
        public List<SearchResult> SerialResults { get; set; }
        public List<SearchResult> TagResults { get; set; } 
        /// <summary>
        /// Uses the Search string to filter a resultset by Serial and Tag
        /// </summary>
        /// <param name="search"></param>
        public SearchInfo(string search)
        {
            SerialResults = new List<SearchResult>();
            TagResults = new List<SearchResult>();

            SerialResults.AddRange(FindSerial(search));
            TagResults.AddRange(FindTags(search));

        }

        private static IEnumerable<SearchResult> FindTags(string search)
        {

            List<SearchResult> result;
            using (var db = new TIPWebITDataContext())
            {
                result = (from i in db.tblTechInventories
                          where i.Tag.Equals(search)
                          select new SearchResult()
                              {
                                  SearchType = "Tag",
                                  Key = i.Tag,
                                  KeyCaption = i.Tag,
                                  Name = i.tblTechItem.ItemName

                              }).ToList();
            }
            return result;
        }
        private static IEnumerable<SearchResult> FindSerial(string search)
        {
            List<SearchResult> result;
            using (var db = new TIPWebITDataContext())
            {
                result = (from i in db.tblTechInventories
                          where i.Serial.Contains(search)
                          select new SearchResult()
                          {
                              SearchType = "Searial",
                              Key = i.Tag,
                              KeyCaption = i.Serial,
                              Name = i.tblTechItem.ItemName

                          }).ToList();
            }
            return result;

        }

        #region Implementation of IDisposable

        public void Dispose()
        {
            SerialResults = null;
            TagResults = null;
        }

        #endregion
    }

    public class SearchResult
    {
        public string SearchType { get; set; }
        public string Key { get; set; }
        public string KeyCaption { get; set; }
        public string Name { get; set; }
    }


}

请指定我如何编写上述代码的测试方法?

1 个答案:

答案 0 :(得分:1)

创建代码的人需要知道它的目的是什么。 这就是测试方法的用途,你想要了解你的软件在所有情况下的表现(通常的,特别是不寻常的,你可能需要创作的地方)。

所以你要问自己的简单问题是:

  • 我的代码的哪些部分可以调用?

  • 我的功能可以采用哪些参数/对象具有哪些对象状态?

  • 在每种情况下(不同参数/对象状态)我都会发生什么?

所以,当你能回答这些问题时,编写测试方法应该是微不足道的;)

开始的一个例子:

我在这里公开看到的唯一一件事是您的构造函数以及两个属性SerialResultsTagResults,因此这些是您要测试的内容。 (我如何看待它们的setter应该是私有的,因为你在构造函数中设置它们)

那么这个构造函数可以采用哪些不同的参数以及它应该如何影响您的属性的结果?显然,您想要测试null valuesempty strings,但也许某些special strings也需要进行测试,因为它们在您的函数中具有特殊含义,例如:{{1}例如,或者你可能在某处定义了一些the whitespace,所有这些应该进入你的单元测试思想,然后进入测试方法。

测试方法的样本结构如下:

magic string