繁体   English   中英

python 2.6。 单元测试框架断言:需要帮助

[英]python 2.6. unittest framework, asserts: help required

我正在使用unittest框架在python 2.6中编写一个测试套件,我想在我的代码中使用断言。 我知道asserts进行了全面的检查,并且在2.7+中要好得多,但目前仅限于使用2.6。

我在使用断言时遇到问题。 我希望能够使用assertIn(a,b)功能,但是,仅在2.7+中。 所以我意识到我必须使用2.6中的assertTrue(x) ,但是没有用。 然后,我查看了该文档该文档说在以前的版本中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.... ,它起作用了。

assertTrue应该可以in测试中正常工作:

self.assertTrue('a' in somesequence)

所有assertIn都执行与上述相同的测试,如果测试失败,则设置一条有用的消息。

import unittest

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

基于Python 2.6的unittest文档,这应该可以工作。 确保将其用作TestCase.assertTrue()。

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

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

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

因此,您可以使用例如assertTrue解决问题:

self.assertTrue(element in list_object)

实际上实现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 ,即使在python 2.6上也可以安全地使用assertIn ,并且错误消息将比纯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))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM