日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

『飞秋』测试驱动开发TDD系列(二)

發(fā)布時間:2025/3/15 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 『飞秋』测试驱动开发TDD系列(二) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

引言

?

  今天我們來做一個TDD的小例子。通過一個棧的實(shí)現(xiàn)來體驗(yàn)一下TDD的過程。在本系列的代碼示例中,使用VS2010作為IDE工具,NUnit作為測試輔助工具。關(guān)于NUnit的使用,在園子中已經(jīng)有很多的文章。可以搜索參考一下。推薦幾篇不錯的:

  NUnit詳細(xì)使用方法

  實(shí)踐單元測試(3)-Using NUnit

?

正文

?

1、簡介
  今天的任務(wù)就是實(shí)現(xiàn)一個棧,一個沒有邊界的棧。就是數(shù)據(jù)結(jié)構(gòu)中的棧,對棧中的元素的數(shù)量沒有限制。棧是一個LIFO(Last-Input-First-Out,后進(jìn)先出)的數(shù)據(jù)結(jié)構(gòu),先進(jìn)入棧的元素要最后出來,最后

進(jìn)入棧的元素可以現(xiàn)出來。

  棧的操作包括:Push、Pop、Top、IsEmpty。

Push,入棧,將元素放入棧中。
Pop,出棧,從棧頂返回一個元素,并且在棧中刪除它。
Top,獲取棧頂元素,不從棧中刪除元素。
IsEmpty,返回棧是否為空,是否沒有元素。
2、任務(wù)列表
根據(jù)上面的功能,寫出一個測試的列表

創(chuàng)建一個棧,驗(yàn)證IsEmpty是否為true。
Push一個元素,驗(yàn)證IsEmpty是否為false。
Push一個元素,然后進(jìn)行Pop操作,驗(yàn)證IsEmpty是否為true。
Push一個元素,記錄這個元素,進(jìn)行Pop操作,看返回的元素和剛才記錄的元素是否一致。
Push三個元素,記錄他們,一個一個的進(jìn)行Pop,驗(yàn)證他們Pop的順序是否正確。
對一個沒有元素的棧進(jìn)行Pop操作。
Push一個元素,進(jìn)行Top操作,驗(yàn)證IsEmpty是否為false。
Push一個元素,進(jìn)行Top操作,看看返回的元素是否就是Push的那個元素。
對一個沒有元素的棧進(jìn)行Top操作。
3、創(chuàng)建測試用例
  針對任務(wù)列表中的每一條,建立一個測試用例。

創(chuàng)建一個棧,驗(yàn)證IsEmpty是否為true。
?

Push一個元素,驗(yàn)證IsEmpty是否為false。
Push一個元素,然后進(jìn)行Pop操作,驗(yàn)證IsEmpty是否為true。
Push一個元素,記錄這個元素,進(jìn)行Pop操作,看返回的元素和剛才記錄的元素是否一致。
Push三個元素,記錄他們,一個一個的進(jìn)行Pop,驗(yàn)證他們Pop的順序是否正確。
對一個沒有元素的棧進(jìn)行Pop操作。
Push一個元素,進(jìn)行Top操作,驗(yàn)證IsEmpty是否為false。
Push一個元素,進(jìn)行Top操作,看看返回的元素是否就是Push的那個元素。
對一個沒有元素的棧進(jìn)行Top操作。
?

?

?

?

?

?

結(jié)論


?  下面是用來測試的Stack類和測試類的源碼。


using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace BeautyCode.TDD.ConApp{?? public? class MyStack<T>??? {?????? private List<T> elements = new List<T>();??????? public bool IsEmpty??????? {??????????? get??????????? {??????????????? return (elements.Count == 0);??????????? }??????? }??????? public void Push(T element)??????? {??????????? elements.Insert(0, element);??????? }??????? public T Pop()??????? {??????????? T top = Top();??????????? elements.RemoveAt(0);??????????? return top;??????? }??????? public T Top()??????? {??????????? if (IsEmpty)??????????????? throw new InvalidOperationException("Stack is Empty");??????????? return elements[0];??????? }??? }}??

?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;
using BeautyCode.TDD.ConApp;

namespace BeautyCode.TDD.Test1
{
??? [TestFixture]
??? public class MyStackTest
??? {
??????? private MyStack<string> _myStack = null;

??????? [SetUp]
??????? public void Init()
??????? {
???????????? _myStack? = new MyStack<string >();
??????? }

??????? [Test]
??????? public void Empty()
??????? {
??????????? Assert.IsTrue(_myStack .IsEmpty);
??????? }

??????? [Test]
??????? public void PushOne()
??????? {
??????????? _myStack.Push("first element");
??????????? Assert.IsFalse(_myStack.IsEmpty,
??????????????? "After Push, IsEmpty should be false");
??????? }

??????? [Test]
??????? public void Pop()
??????? {
??????????? _myStack.Push("first element");
??????????? _myStack.Pop();
??????????? Assert.IsTrue(_myStack.IsEmpty,
??????????????? "After Push - Pop, IsEmpty should be true");
??????? }

??????? [Test]
??????? public void PushPopContentCheck()
??????? {
??????????? string? expected = "1234";
??????????? _myStack.Push(expected);
??????????? string? actual = _myStack.Pop();
??????????? Assert.AreEqual(expected, actual);
??????? }

??????? [Test]
??????? public void PushPopMultipleElements()
??????? {
??????????? string pushed1 = "1";
??????????? _myStack.Push(pushed1);
??????????? string pushed2 = "2";
??????????? _myStack.Push(pushed2);
??????????? string pushed3 = "3";
??????????? _myStack.Push(pushed3);

??????????? string popped = (string)_myStack.Pop();
??????????? Assert.AreEqual(pushed3, popped);
??????????? popped = (string)_myStack.Pop();
??????????? Assert.AreEqual(pushed2, popped);
??????????? popped = (string)_myStack.Pop();
??????????? Assert.AreEqual(pushed1, popped);
??????? }

??????? [Test]
??????? [ExpectedException(typeof(InvalidOperationException))]
??????? public void PopEmpty_myStack()
??????? {
??????????? _myStack.Pop();
??????? }

??????? [Test]
??????? public void PushTop()
??????? {
??????????? _myStack.Push("42");
??????????? _myStack.Top();
??????????? Assert.IsFalse(_myStack.IsEmpty);
??????? }

??????? [Test]
??????? public void PushTopContentCheckOneElement()
??????? {
??????????? string pushed = "42";
??????????? _myStack.Push(pushed);
??????????? string topped = (string)_myStack.Top();
??????????? Assert.AreEqual(pushed, topped);
??????? }

??????? [Test]
??????? public void PushTopContentCheckMultiples()
??????? {
??????????? string pushed3 = "3";
??????????? _myStack.Push(pushed3);
??????????? string pushed4 = "4";
??????????? _myStack.Push(pushed4);
??????????? string pushed5 = "5";
??????????? _myStack.Push(pushed5);

??????????? string topped = (string)_myStack.Top();
??????????? Assert.AreEqual(pushed5, topped);
??????? }

??????? [Test]
??????? public void PushTopNo_myStackStateChange()
??????? {
??????????? string pushed = "44";
??????????? _myStack.Push(pushed);

??????????? for (int index = 0; index < 10; index++)
??????????? {
??????????????? string topped = (string)_myStack.Top();
??????????????? Assert.AreEqual(pushed, topped);
??????????? }
??????? }

??????? [Test]
??????? [ExpectedException(typeof(InvalidOperationException))]
??????? public void TopEmpty_myStack()
??????? {
??????????? _myStack.Top();
??????? }

??????? [Test]
??????? public void PushNull()
??????? {
??????????? _myStack.Push(null);
??????????? Assert.IsFalse(_myStack.IsEmpty);
??????? }

??????? [Test]
??????? public void PushNullCheckPop()
??????? {
??????????? _myStack.Push(null);
??????????? Assert.IsNull(_myStack.Pop());
??????????? Assert.IsTrue(_myStack.IsEmpty);
??????? }

??????? [Test]
??????? public void PushNullCheckTop()
??????? {
??????????? _myStack.Push(null);
??????????? Assert.IsNull(_myStack.Top());
??????????? Assert.IsFalse(_myStack.IsEmpty);
??????? }


??? }
}

?

飛秋官網(wǎng):http://www.freeeim.com/

總結(jié)

以上是生活随笔為你收集整理的『飞秋』测试驱动开发TDD系列(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。