2013-01-16 17 views
7

'un altında emredilebiliyor Python unittests var burdayım. Ben setUpModule(), tearDownModule() ve test modülleri ithalatı bazı garip sıralaması gözlemledim. vesetUpModule, tearDownModule ve ithalat

test1.py 
test_dir/test2.py 

test1.py Hem aşağıdaki gibi test2.py: Bu (örnek) dizin yapısı

    : I nosetests -s test1.py test_dir/test2.py çalıştırın

    import sys 
    import unittest 
    
    def flushwrite(text): 
        sys.stdout.write(text + '\n') 
        sys.stdout.flush() 
    
    flushwrite("import %s" % __name__) 
    
    def setUpModule(): 
        flushwrite("setUp %s" % __name__) 
    
    def tearDownModule(): 
        flushwrite("tearDown %s" % __name__) 
    
    class Test(unittest.TestCase): 
        def test1(self): 
         flushwrite("running %s.test1" % __name__) 
    

    , bu dizisine bakınız

  1. import test1
  2. import test2
  3. setUp test1
  4. çalışan test2.test1 test1.test1
  5. söküm test1
  6. Kur dnm2
  7. çalışan
  8. G/arzu beklediğiniz olduğunu tearDown dnm2

.

  1. ithalat test1
  2. ithalat dnm2
  3. Kur test1
  4. test1.test1
  5. Kur test2 çalıştıran: I (test2.py bulmak için deney keşfini kullanarak) nosetests -s test1.py test_dir çalıştırdığınızda, bu diziyi bakın
  6. çalışan test2.test1
  7. tearDown dnm2
  8. tearDown test1 tearDown Test1 TEST2 testlerinin SONRA yürütür için bu

not edin. Bu, test2 çalıştırıldığında sistemin temiz bir durumda olmadığı anlamına gelir! Açıkçası, bu büyük bir dizin ağacından keşfedilen binlerce testin üretim ortamında bir sorun olabilir.

N'aber? Bir şeyi yanlış anladım mı? Her test modülünden sonra tearDownModule'un çalışmasını sağlamanın bir yolu var mı? senin test2.py dosya test1.py aynı modülde altında olduğundan

+0

Nosetests'in ['--with-isolation'] (https://nose.readthedocs.org/en/latest/plugins/isolate.html) adresini kullanabilirim. Ancak, kendi sorunları var gibi görünüyor. – dbn

+0

Şimdilik, tearDownModule() yerine tearDownSuite() kullanarak taşıdım. – dbn

cevap

1

, test1.py den setUpModule ve tearDownModule yöntemleri hem test2.py için geçerlidir.

Sadece setUpClass ve tearDownClass kullanıp bunları Test sınıfınızın içine yerleştirdim. Bu şekilde setUp ve tearDown öğelerinin her bir sınıfa ayrı ayrı bağlandığından emin olursunuz.