软件测试_对于堆栈的单元测试

转自 http://www.51testing.com/html/80/n-3726280.html

  

(1)往一个空栈中`Push`数据,该操作成功的话栈应该不空,并且栈顶元素就是刚`Push`进去的那个数据。

(2)连续地往栈中`Push`数据,每次操作后查看栈顶元素都是刚刚放进去的那个数据。
(3)往栈中`Push`特殊的数据,我们这里存放的是`string`,所以添加`string.Empty`和`null`也应该是成功的。
(4)连续地`Pop`操作,确认每次取出的都是栈顶元素。
(5)对空栈进行`Pop`或`Top`操作,会抛出异常。
 
复制代码
// StackExercise Class
  namespace FirstUnitTest
  {
  public class StackExercise
  {
  private List<string> _stack;
      public StackExercise()
      {
          _stack = new List<string>();
      }
      public void Push(string str)
      {
          _stack.Add(str);
      }
      public void Pop()
      {
          if (Empty())
          {
              throw new InvalidOperationException("Empty stack cannot pop");
          }
          _stack.Remove(_stack.Last());
      }
      public string Top()
      {
          if (Empty())
          {
              throw new InvalidOperationException("Empty stack cannot get top");
          }
          return _stack.Last();
      }
      public bool Empty()
      {
          return (!_stack.Any());
      }
  }
复制代码

 

测试类

复制代码
namespace FirstUnitTest
  {
  [TestClass]
  public class TestStackExercise
  {
  [TestMethod]
  public void Test_SuccessAndNotEmpty_AfterPush()
  {
  // Arrange
  var stack = new StackExercise();
  var testElement = "testElement";
          // Action
          stack.Push(testElement);
          // Assert
          Assert.IsFalse(stack.Empty());
          Assert.AreEqual(testElement, stack.Top());
      }
      [TestMethod]
      public void Test_Success_PushMoreThanOnce()
      {
          // Arrange
          var stack = new StackExercise();
          var testElement = "testElement_{0}";
          // Action & Assert
          for (int i = 0; i < 10; ++i)
          {
              stack.Push(string.Format(testElement, i));
              Assert.AreEqual(string.Format(testElement, i), stack.Top());
          }
      }
      [TestMethod]
      public void Test_Success_PushEmptyString()
      {
          // Arrange
          var stack = new StackExercise();
          string emptyString = string.Empty;
          string nullString = null;
          // Action & Assert
          stack.Push(emptyString);
          Assert.AreEqual(emptyString, stack.Top());
          stack.Push(nullString);
          Assert.AreEqual(nullString, stack.Top());
      }
      [TestMethod]
      public void Test_Success_PopLastTwoElements()
      {
          // Arrange
          var stack = new StackExercise();
          var testElement1 = "test1";
          var testElement2 = "test2";
          // Action & Assert
          stack.Push(testElement1);
          stack.Push(testElement2);
          Assert.AreEqual(testElement2, stack.Top());
          stack.Pop();
          Assert.IsFalse(stack.Empty());
          Assert.AreEqual(testElement1, stack.Top());
          stack.Pop();
          Assert.IsTrue(stack.Empty());            
      }
      [TestMethod]
      [ExpectedException(typeof(InvalidOperationException))]
      public void Test_ThrowException_PopFromEmptyStack()
      {
          var stack = new StackExercise();
          stack.Pop();
      }
      [TestMethod]
      [ExpectedException(typeof(InvalidOperationException))]
      public void Test_ThrowException_TopFromEmptyStack()
      {
          var stack = new StackExercise();
          stack.Top();
      }
  }
}
复制代码

 

 

posted on   石墨方  阅读(970)  评论(0编辑  收藏  举报

编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示