Python Testing With a Queue¶
Here is the Queue¶
class Queue:
def __init__(self):
self.items = []
def is_empty(self):
"""Check if the queue is empty."""
return len(self.items) == 0
def enqueue(self, item):
"""Add an item to the back of the queue."""
self.items.append(item)
print(f"Added '{item}' to queue.")
def dequeue(self):
"""Remove an item from the front of the queue."""
if self.is_empty():
print("Queue is empty. Nothing to remove.")
return None
removed = self.items.pop(0)
print(f"Removed '{removed}' from queue.")
return removed
def change(self, index, new_value):
"""Change the value at a given position."""
if 0 <= index < len(self.items):
old_value = self.items[index]
self.items[index] = new_value
print(f"Changed item at index {index} from '{old_value}' to '{new_value}'.")
else:
print("Invalid index. No changes made.")
def display(self):
"""Display all items in the queue."""
if self.is_empty():
print("Queue is empty.")
else:
print("Current queue:", self.items)
# Example usage
if __name__ == "__main__":
q = Queue()
q.enqueue("Task1")
q.enqueue("Task2")
q.enqueue("Task3")
q.display()
q.change(1, "UpdatedTask2")
q.display()
q.dequeue()
q.display()
Here is the Python Test using unittest¶
import unittest
#import pytest
from python_queue import Queue
class TestQueue(unittest.TestCase):
def setUp(self):
"""Run before each test — creates a fresh queue instance."""
self.q = Queue()
def test_enqueue(self):
"""Test adding items to the queue."""
self.q.enqueue("A")
self.q.enqueue("B")
self.assertEqual(self.q.items, ["A", "B"])
def test_dequeue(self):
"""Test removing items from the front of the queue."""
self.q.enqueue("A")
self.q.enqueue("B")
removed = self.q.dequeue()
self.assertEqual(removed, "A") # first in, first out
self.assertEqual(self.q.items, ["B"]) # remaining queue
def test_dequeue_empty(self):
"""Test that dequeue returns None when queue is empty."""
result = self.q.dequeue()
self.assertIsNone(result)
self.assertEqual(self.q.items, [])
def test_change_valid_index(self):
"""Test changing an item at a valid index."""
self.q.enqueue("Task1")
self.q.enqueue("Task2")
self.q.change(1, "UpdatedTask2")
self.assertEqual(self.q.items, ["Task1", "UpdatedTask2"])
def test_change_invalid_index(self):
"""Test changing with an invalid index does nothing."""
self.q.enqueue("Task1")
self.q.change(5, "Invalid")
self.assertEqual(self.q.items, ["Task1"]) # no change expected
def test_is_empty(self):
"""Test is_empty works correctly."""
self.assertTrue(self.q.is_empty())
self.q.enqueue("X")
self.assertFalse(self.q.is_empty())
if __name__ == "__main__":
unittest.main()