Visual Studio 2012 單元測試之泛型類(Generics Unit Test)

來源:互聯網
上載者:User

關於單元測試,如果不會用可以參照我的上篇博文————在Visual Studio 2012使用單元測試

首 先分享一篇博文,[Visual Studio] 開啟Visual Studio 2012通過右鍵菜單建立單元測試(Unit Test)。

泛型有兩種,一般泛型與類型約束泛型,在對包含泛型的方法進行單元測試中也可以這麼分,詳情可 參閱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

在測試專案編寫一個測試協助類

class StackTestHelper    {        public static void LengthTest<T>()            where T : struct        {            var stack = GetStackInstance<T>();            Assert.AreEqual(stack.Length, 0);        }            public static void PushTest<T>()            where T : struct        {            var stack = GetStackInstance<T>();            stack.Push(default(T));            Assert.AreEqual(stack.Length, 1);        }            public static void PopTest<T>(params T[] values)            where T : struct        {            var stack = GetStackInstance<T>();            if (values == null)            {                return;            }                            int pushLength = 0;            foreach (T val in values)            {                stack.Push(val);                Assert.AreEqual(stack.Length, ++pushLength);            }                for (int i = stack.Length - 1; i >= 0; i--)            {                Assert.AreEqual<T>(stack.Pop(), values[i]);                Assert.AreEqual(stack.Length, i);            }        }            public static StackNum<T> GetStackInstance<T>()            where T : struct        {            return new StackNum<T>();        }    }    StackTestHelper

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.