我使用单元测试进行手工编码基本数据结构。
我正在创建一个链表节点,并且只希望它能够为其下一个和上一个节点成员接受某些值。它应该只接受另一个LinkedNode对象或None。但是,它仍然接受此类成员的任何值。
关于为什么的任何想法?
LinkedNode类:
class LinkedNode():
__slots__ = ['__value','__prev_node','__next_node']
def __init__(self, value, prev_node=None, next_node=None):
self.value = value
self.prev_node = prev_node
self.next_node = next_node
@property
def value(self):
return self.__value
@value.setter
def value(self, value):
self.__value = value
@property
def prev_node(self):
return self.__prev_node
@prev_node.setter
def prev_node(self, prev_node):
if isinstance(self, LinkedNode) or prev_node==None:
self.__prev_node = prev_node
else:
raise ValueError('Can not set non LinkedNode object to member prev_node!')
@property
def next_node(self):
return self.__next_node
@next_node.setter
def next_node(self, next_node):
if isinstance(self, LinkedNode) or next_node==None:
self.__next_node = next_node
else:
raise ValueError('Can not set non LinkedNode object to member next_node!')
测试文件:
import unittest
from linkednode import LinkedNode
class TestLinkedNode(unittest.TestCase):
def test_init(self):
node1 = LinkedNode(4)
node2 = LinkedNode("string")
#Checking value
self.assertEqual(node1.value, 4)
self.assertEqual(node2.value, "string")
self.assertEqual(node1.prev_node, node1.next_node, None)
def test_assignment(self):
node1 = LinkedNode(4)
node2 = LinkedNode("string")
#Checking default values
self.assertEqual(node1.prev_node, None)
self.assertEqual(node1.next_node, None)
#Checking Node Assignment
try:
node1.next_node = node2
exception = False
except:
exception = True
self.assertFalse(exception)
exception = False
try:
node1.prev_node = "Bad Value"
except:
exception = True
self.assertTrue(exception)
if __name__ == '__main__':
unittest.main()
答案 0 :(得分:0)
此错误是由于条件疏忽造成的。
isinstance(self,LinkedNode)正在检查self(LinkedNode对象)是否为LinkedNode。这总是如此。
应该引用新对象。
糟糕