为什么我用Python3.4的`unittest`库得到一个AttributeError?

时间:2016-08-14 17:34:32

标签: python python-unittest

所以这是我的代码:

import unittest

class Primes:
    @staticmethod
    def first(n):
    <python code here>

class Test(unittest.TestCase):
    def __init__(self):
        pass
    def assert_equals(self, l, m):
        self.assertEqual(l, m)

Test = Test()
Test.assert_equals(Primes.first(1), [2])

每当我运行我的代码时,都会收到以下错误:

Traceback (most recent call last):
  File "firstNPrimes.py", line 37, in <module>
    Test.assert_equals(Primes.first(1), [2])
  File "firstNPrimes.py", line 34, in assert_equals
    self.assertEqual(l, m)
  File "/usr/lib/python3.4/unittest/case.py", line 796, in assertEqual
    assertion_func = self._getAssertEqualityFunc(first, second)
  File "/usr/lib/python3.4/unittest/case.py", line 777, in _getAssertEqualityFunc
    asserter = self._type_equality_funcs.get(type(first))
AttributeError: 'Test' object has no attribute '_type_equality_funcs'

我不明白这里的问题是什么。

1 个答案:

答案 0 :(得分:0)

您的方法对我来说很好,并且模仿我在帮助函数提供的示例代码中看到的内容。

导入unittest 帮助(单元测试)

我在使用python 2.7环境中的虚拟框中使用debs构建时遇到了同样的问题。由于某种原因,只有assertEqual方法存在问题。 assertAlmostEqual(科学断言相等),assertSequenceEqual,assertItemEqual等都没有问题。

由于您是unittestingTestCase的子类,因此您定义的类继承unittest.TestCase类的所有方法,包括assertEqual方法。

我的代码可以运行(从python 2.7的命令行):

  
    
      

将testing_code导入为t

             

test_object = t.Test()

             

t.assertSequenceEqual([4,5,6],[4,5,6])

             

t.assertNotEqual(4,7)

    
  

并没有问题......我尝试使用简单的assertEqual方法时遇到同样的错误。我不认为这是一个代码结构/滥用unittest问题,我很确定这是一个环境/构建问题。我决定在课堂上需要一个断言相等的方法,所以我只做了一个简单的方法:

 def AssertEqual(self, a, b):
    if a!=b:
        msg= 'inputs unequal: a, b:', a, b
        raise ValueError, msg