关于单元测试,如果不会用可以参照我的上篇博文————在Visual Studio 2012使用单元测试

首先分享一篇博文, 

泛型有两种,一般泛型与类型约束泛型,在对包含泛型的方法进行单元测试中也可以这么分,详情可参阅http://msdn.microsoft.com/en-us/library/vstudio/ms243401.aspx  。从该页面可以知道,关于泛型的单元测试,微软类库(Microsoft.VisualStudio.TestTools.UnitTesting)提供了类“GenericParameterHelper”帮助我们编写Unit Test代码。

首先看下非类型约束的一个demo,我就直接上代码了

        public static bool IsCollectionEmpty<T>(ICollection<T> collection)
        {
            return collection == null || collection.Count < 1;
        }

测试代码

        /// <summary>
        ///IsCollectionEmpty 的测试
        ///</summary>
        public void IsCollectionEmptyTestHelper<T>()
        {
            //三个用例:以非空集合,空集合,null分别作为参数
            ICollection<T> collection = new T[]{default(T)}; // TODO: 初始化为适当的值
            bool expected = false; // TODO: 初始化为适当的值
            bool actual;
            actual = UtilityCheckData.IsCollectionEmpty<T>(collection);
            Assert.AreEqual(expected, actual);

            collection = new T[] { };
            Assert.AreEqual(true, UtilityCheckData.IsCollectionEmpty<T>(collection));

            Assert.AreEqual(true, UtilityCheckData.IsCollectionEmpty<T>(null));
        }

        [TestMethod()]
        public void IsCollectionEmptyTest()
        {
            IsCollectionEmptyTestHelper<GenericParameterHelper>();
        }

关于泛型的测试其实也挺简单的,没什么可以啰嗦的,但是如果有了类型约束,那么GenericParameterHelper类将很可能不再能用了。


然后再来看我做的一个类型约束泛型的单元测试代码。

 写一个类似栈的需测试的类:

    public class StackNum<T> where T : struct
    {
        List<T> array = null;

        public StackNum()
        {
            this.array = new List<T>();
        }

        public void Push(T value)
        {
            array.Add(value);
        }

        public T Pop()
        {
            T val = array[this.Length - 1];
            this.array.Remove(val);
            return val;
        }

        public int Length
        {
            get { return this.array.Count; }
        }
    }
StackNum

相关文章: