1

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

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

我收到消息:

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

这与我为assertIn(a,b)和得到的东西是一样的assertTrue(x)。所以我完全不知道我应该做什么。

我的问题的简短版本:

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

我的代码:

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

4 回答 4

3

assertTrue应该可以很好地进行in测试:

self.assertTrue('a' in somesequence)

所做的只是运行与上述assertIn相同的测试,并在测试失败时设置有用的消息。

于 2012-08-12T09:42:14.833 回答
3
import unittest

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

这应该工作,基于来自 Python 2.6 的 unittest的文档。请务必将其用作 TestCase.assertTrue()。

编辑:在您的示例中,将其设置为self.failUnless("foo" in ret)并且它应该可以工作。

于 2012-08-12T09:46:05.830 回答
1

你的测试用例代码真的很有帮助。

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

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

self.assertTrue(element in list_object)
于 2012-08-12T09:48:38.717 回答
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))

然后,您可以将所有测试用例基于此类,甚至可以在 python 2.6 上unittest.TestCase安全使用assertIn,并且错误消息将比 pure 好得多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))
于 2014-04-16T12:49:17.513 回答