Python UnitTest并禁止类成员的某些值

时间:2015-09-26 21:10:32

标签: python unit-testing

我使用单元测试进行手工编码基本数据结构。

我正在创建一个链表节点,并且只希望它能够为其下一个和上一个节点成员接受某些值。它应该只接受另一个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()

1 个答案:

答案 0 :(得分:0)

此错误是由于条件疏忽造成的。

isinstance(self,LinkedNode)正在检查self(LinkedNode对象)是否为LinkedNode。这总是如此。

应该引用新对象。

糟糕