编写栈实现类Stack,包含push、pop等操作,并编写测试类使用pytest组件测试Stack的push和pop操作。
时间: 2024-10-10 13:06:54 浏览: 23
学习Python,并应用到测试工作中。.zip
在Python中,我们可以使用列表(list)来简单地实现一个栈(data stack)。栈是一种特殊的线性数据结构,遵循“后进先出”(Last In First Out, LIFO)原则。下面是一个简单的`Stack`类的实现,包含`push`(入栈)、`pop`(出栈)和`is_empty`(判断是否为空)等方法:
```python
class Stack:
def __init__(self):
self.items = []
def push(self, item):
"""将元素推入栈顶"""
self.items.append(item)
def pop(self):
"""弹出并返回栈顶元素(如果存在)"""
if not self.is_empty():
return self.items.pop()
def is_empty(self):
"""检查栈是否为空"""
return len(self.items) == 0
```
现在我们使用Pytest框架来测试`Stack`类的`push`和`pop`操作:
```python
import pytest
def test_stack_push_and_pop():
# 初始化一个空栈
s = Stack()
# 测试push方法
s.push(1)
s.push(2)
s.push(3)
# 使用pop方法并且检查元素顺序
assert s.pop() == 3
assert s.pop() == 2
assert s.pop() == 1
# 测试空栈的pop
with pytest.raises(IndexError):
s.pop()
# 测试is_empty方法
assert s.is_empty() == True
# 之后再压入一个元素,然后确认不再是空栈
s.push(4)
assert s.is_empty() == False
# 如果在终端运行,你可以直接看到测试结果
if __name__ == "__main__":
test_stack_push_and_pop()
```
在这个测试用例中,我们首先创建了一个空栈,然后依次测试了`push`、`pop`和`is_empty`方法的功能,确保它们按照预期工作。`with pytest.raises(IndexError):`用于捕获因索引越界而引发的`IndexError`异常,这是当试图从空栈中弹出元素时应有的行为。
阅读全文