遇到Python的单元测试问题

时间:2016-10-04 02:04:34

标签: python unit-testing python-3.x python-unittest

我正在学习Python并尝试测试我使用unittest编写的Polynomial类。看起来我在Python中直接运行测试并使用unittest运行测试得到了不同的结果,我不明白发生了什么。

import unittest
from w4_polynomial import Polynomial

class TestPolynomialClass(unittest.TestCase):

    def setUp(self):
        self.A = Polynomial()
        self.A[1] = 1
        self.A[2] = 2
        self.B = Polynomial()
        self.B[1234] = 5678

    def test_assertNotEq(self):
        self.C = Polynomial()
        self.C[1234] = 5678
        self.C[1] = 1
        self.C[2] = 3
        self.assertNotEqual(self.A+self.B, self.C)

if __name__ == '__main__':
    unittest.main()

单位测试失败......但我不明白为什么。两个多项式不相同。以下是使用print进行比较的python脚本中完成的相同测试的结果。多项式是不同的,但结果相同:

A+B =    442x^123 + 12x^6 + 12x^4 + 5x^1 + 0x^0 + -99x^-12 
C =      442x^123 + 12x^6 + 12x^4 + 5x^1 + 0x^0 + 99x^-12 
A+B==C is  False

任何帮助解释正在发生的事情将不胜感激。

抱歉忘记了unittest的错误,

    FAIL: test_assertEq (__main__.TestPolynomialClass)
----------------------------------------------------------------------
Traenter code hereceback (most recent call last):
  File "add.py", line 18, in test_assertEq
self.assertNotEqual(self.A+self.B, self.C)
AssertionError: <w4_polynomial.Polynomial object at 0x7f2d419ec390> == <w4_polynomial.Polynomial object at 0x7f2d419ec358>

现在是多项式类:

class Polynomial():

def __init__(self, value=[0]):
    self.v = []
    self.n = []
    temp = list(reversed(value[:]))
    if value == [0]:
        self[0] = 0
    else:
        for x in range(0, len(temp)):
            self[x] = temp[x]
    #self.__compress()

...

def __eq__(self, value):
    temp1 = self.v[:]
    temp2 = self.n[:]
    temp3 = value.v[:]
    temp4 = value.n[:]
    temp1.sort()
    temp2.sort()
    temp3.sort()
    temp4.sort()
    return (temp1 == temp3 and temp2 == temp4)

def __ne__(self, value):
    temp1 = self.v[:]
    temp2 = self.n[:]
    temp3 = value.v[:]
    temp4 = value.n[:]
    temp1.sort()
    temp2.sort()
    temp3.sort()
    temp4.sort()
    return (temp1 != temp3 and temp2 != temp4)

...

def main():
    pass

if __name__=="__main__":
    main()

1 个答案:

答案 0 :(得分:0)

我认为问题在于使用多项式类中的{{1}}函数实现。 调用assertNotEqual时,如果传递的值不相等则需要True值。但是在这个类中,你直接发送temp1!= temp3和temp2!= temp4的输出。

所以,函数应该是这样的

{{1}}