2014-06-10 25 views
12

Düzenleme:Bir birim testinde yapılan baskının bastırılmasının bir yolu var mı?

class Foo: 
    def bar(self): 
     print 'bar' 
     return 7 

Ve aşağıdaki birim testi ki::

import unittest 
class ut_Foo(unittest.TestCase): 
    def test_bar(self): 
     obj = Foo() 
     res = obj.bar() 
     self.assertEqual(res, 7) 
Python 2.6 (etiketli gibi) kullanıyorum fark Lütfen

aşağıdakileri sorunum Say

Yani, eğer çalıştırırsam:

alıyorum:

bar # <-- I don't want this, but I *do* want the rest 
. 
---------------------------------------------------------------------- 
Ran 1 test in 0.002s 

OK 
Exit code: False 

Sorum şu: hala unittest çerçevenin çıkışını elde ederken test edilen nesnenin çıkışını bastırmak için bir yolu var mı?

+0

bir işlev susturmaya nasıl bu gönderiye göz stackoverflow.com/questions/2828953/silence-the-stdout-of-a-function-in-python-without-trashing-sys-stdout-and-resto – otus

cevap

12

seçenek "-b" ile unittest Çağrı - -b seçeneği ile çalıştırın o

Foo.py

class Foo: 
    def bar(self): 
     print "bar" 
     return 7 

test.py

import unittest 
from Foo import Foo 

class test_Foo(unittest.TestCase): 
    def test_bar(self): 
     obj = Foo() 
     res = obj.bar() 
     self.assertEqual(res, 7) 

if __name__ == "__main__": 
    unittest.main() 

tampon stdout ve stderr

$ python test.py -b 
. 
---------------------------------------------------------------------- 
Ran 1 test in 0.000s 

OK 

Alternatif: kullanmak nose Ben nose varsayılan testi keşif kurallarını karşılamak için test tarafından öneki sınıf ve yöntemleri var test paketi değiştirilmiş olması, komutunu nosetests

Not yükler neyi

$ pip install nose 

. Varsayılan olarak

nosetests Eğer çıktıyı bakınız -s anahtarı kullanmak istiyorsanız çıktı üretmesi

$ nosetests 
. 
---------------------------------------------------------------------- 
Ran 1 test in 0.002s 

OK 

göstermiyor: http: //

$ nosetests -s 
bar 
. 
---------------------------------------------------------------------- 
Ran 1 test in 0.002s 

OK 
+0

Başvuru: https://docs.python.org/2/ library/unittest.html # cmdoption-unittest-b –

+8

Ayrıca 'unittest.main (buffe) kullanabilirsiniz. r = Doğru) 'varsayılan olarak bunu kullanmak için – KillianDS

+0

Bu python 2.7 ile iyi çalışır ancak ne yazık ki, bu seçeneği desteklemeyen python 2.6 hakkında soru sordum. – asherbar

İlgili konular