软件测试_对于堆栈的单元测试
转自 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(); } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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 让容器管理更轻松!