Как игнорировать поле из вложенной структуры данных при тестировании с помощью unittest?Python

Программы на Python
Anonymous
Как игнорировать поле из вложенной структуры данных при тестировании с помощью unittest?

Сообщение Anonymous »

Я пытаюсь протестировать операцию Rotate_left красно-черного дерева. Но я продолжаю получать RecursionError. Вот моя незавершенная реализация:

Код: Выделить всё

from dataclasses import dataclass
from enum import Enum
from typing import Optional, Generic, TypeVar

T = TypeVar('T')

class Color(Enum):
RED = 0
BLACK = 1

@dataclass
class Node(Generic[T]):
color: Color
value: T
parent: Optional['Node[T]'] = None
left: Optional['Node[T]'] = None
right: Optional['Node[T]'] = None

@dataclass
class RedBlackTree(Generic[T]):
root: Node

def rotate_left(self, x: Node[T]):
y = x.right
x.right = y.left
if y.left != None:
y.left.parent = x

y.parent = x.parent
if x.parent == None:
self.root = y
elif x == x.parent.left:
x.parent.left = y
else:
x.parent.right = y
y.left = x
x.parent = y
Вот мой тестовый пример:

Код: Выделить всё

import pprint
import unittest
from src.red_black_tree import RedBlackTree, Node, Color

class TestRedBlackTreeMethods(unittest.TestCase):
def test_left_rotation(self):
node4 = Node(Color.BLACK, value=15, left=None, right=None)
node2 = Node(Color.BLACK, value=2, left=None, right=None)
node3 = Node(Color.RED, value=12, left=None, right=node4)
node1 = Node(color=Color.RED, parent=None, left=node2, right=node3, value=10)
node4.parent = node3
node3.parent = node1
node2.parent = node1
tree = RedBlackTree(root=node1)

tree.rotate_left(node1)

expected_node4 = Node(Color.BLACK, value=2, left=None, right=None)
expected_node3 = Node(color=Color.RED, left=node2, value=10)
expected_node2 = Node(Color.BLACK, value=15, left=None, right=None)
expected_node1 = Node(Color.RED, value= 12, parent=None, right=expected_node2, left=expected_node3)
expected_node2.parent = expected_node1
expected_node3.parent = expected_node1
expected_node4.parent = expected_node3
expected_tree = RedBlackTree(root=expected_node1)

self.assertEqual(tree.root.value, expected_tree.root.value)
self.assertEqual(tree.root.left.value, expected_tree.root.left.value)
self.assertEqual(tree.root.right.value, expected_tree.root.right.value)
self.assertEqual(tree.root.left.left.value, expected_tree.root.left.left.value)
self.assertEqual(tree, expected_tree)

if __name__ == '__main__':
unittest.main()
Я подозреваю, что выполнение self.assertEqual(tree, ожидаемое_дерево) разрушает стек из-за родительского атрибута. Поэтому я хотел бы знать, возможно ли заставить unittest игнорировать этот атрибут или есть более адекватный метод для этой ситуации.


Подробнее здесь: https://stackoverflow.com/questions/783 ... h-unittest

Вернуться в «Python»