python 2.6。 unittest框架,断言:需要帮助

时间:2012-08-12 09:23:53

标签: python unit-testing python-2.6

我正在使用unittest框架在python 2.6中编写测试套件,我想在我的代码中使用asserts。我知道断言得到了彻底的改革,并且在2.7+中更好,但我现在仅限于使用2.6。

我在使用断言时遇到问题。我希望能够使用assertIn(a,b)功能,但唉,这只是2.7+。所以我意识到我必须使用同样在2.6中的assertTrue(x),但这不起作用。然后,我查看了this document,其中说以前的版本assertTrue(x)曾经是failUnless(x),所以我在我的代码中使用了它,但仍然没有结果。

我收到消息:

  

NameError:未定义全局名称“failUnless”

assertIn(a,b)assertTrue(x)相同。 所以我完全不知所措。

我的问题的缩短版本:

我希望能够在python 2.6中实现assertIn(a,b)。 有人对此有任何解决方案吗?

我的代码:

import unittest

class test_base(unittest.TestCase):
    # some functions that are used by many tests

class test_01(test_base):
    def setUp(self):
        #set up code

    def tearDown(self):
        #tear down code

    def test_01001_something(self):
        #gets a return value of a function
        ret = do_something()

        #here i want to check if foo is in ret
        failUnless("foo" in ret)

编辑:好像我是个白痴。我需要做的就是添加self.assert....并且它有效。

4 个答案:

答案 0 :(得分:3)

assertTrue应该可以正常进行in测试:

self.assertTrue('a' in somesequence)

所有assertIn执行与上面相同的测试,并在测试失败时设置有用的消息。

答案 1 :(得分:2)

import unittest

class MyTest(unittest.TestCase):
    def test_example(self):
        self.assertTrue(x)

这应该有效,基于unittest from Python 2.6的文档。一定要将它用作TestCase.assertTrue()。

编辑:在您的示例中,将其设置为self.failUnless("foo" in ret),它应该有效。

答案 2 :(得分:1)

您的测试用例代码确实有帮助。

您的问题是您尝试将assert [Something]用作函数,而它们是TestCase类的方法。

所以你可以解决你的问题,例如assertTrue

self.assertTrue(element in list_object)

答案 3 :(得分:1)

实际上实施assertIn非常简单。这就是我在单元测试中使用的内容:

class MyTestCase(unittest.TestCase)       
    def assertIn(self, item, iterable):
        self.assertTrue(item in iterable,
                        msg="{item} not found in {iterable}"
                             .format(item=item,
                                     iterable=iterable))

然后,您可以将所有测试用例基于此类而不是unittest.TestCase并安全地使用assertIn甚至在python 2.6上,并且错误消息将比纯assertTrue好得多。为了比较Python 2.7中的assertIn的实际实现:

def assertIn(self, member, container, msg=None):
    """Just like self.assertTrue(a in b), but with a nicer default message."""
    if member not in container:
        standardMsg = '%s not found in %s' % (safe_repr(member),
                                              safe_repr(container))
        self.fail(self._formatMessage(msg, standardMsg))