[英]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.