2012-08-12 72 views
1

我正在使用unittest框架在python 2.6中编写测试套件,并且我想在我的代码中使用断言。我知道断言得到了彻底的检修,并且在2.7+以上更好,但我现在只局限于使用2.6。python 2.6。单元测试框架,断言:需要帮助

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

我得到的消息:

NameError: global name 'failUnless' is not defined

这是我得到了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....,它工作。

+1

您能否提供您的测试用例的源代码? – 2012-08-12 09:34:41

+0

@RostyslavDzinko我可以,我不认为这会有很大的帮助。一会儿。 – 2012-08-12 09:36:29

+0

@InbarRose:发布你的代码使所有的区别.... :-) – 2012-08-12 09:49:57

回答

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)它应该工作。

+0

即使马丁首先回答,但接受了你的回答,因为你没有像他那样多的积分。 :) – 2012-08-12 09:48:59

+0

谢谢!祝你好运。 – 2012-08-12 09:50:49

+1

@InbarRose:你知不知道有人担心高级代表用户在回答时总是赢?谢谢你证明他们错了。 :-) – 2012-08-12 11:32:13

3

assertTrue应该只是罚款为in测试:

self.assertTrue('a' in somesequence) 

所有assertIn确实运行相同的测试如上所述,如果测试失败设置一个有用的消息。

+0

我必须包含'self'吗?这将是一个简单的错误。 – 2012-08-12 09:46:23

+0

@InbarRose:是的,'assert *'方法就是这个类的方法。 :-) – 2012-08-12 09:49:25

1

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

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

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

self.assertTrue(element in list_object) 
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,甚至蟒蛇2.6和错误消息,安全地使用assertIn会比纯assertTrue好得多。用于比较Python 2中assertIn的实际实现。7:

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))