2013-03-11 15 views
12

Uygulamamın dosyaları/Files altındayken,/UnitTests içindeki test ünitelerine sahip olmak istiyorum, böylece uygulama ve testi açıkça ayırdım.Python unittesting: başka bir modüldeki testleri çalıştır

mainApp.py ile aynı modül yollarını kullanabilmek için, kök klasöründe bir testController.py oluşturdum. Sonra

import unittest 
import Files.Controllers.blabla as blabla 


class TestMyUnit(unittest.TestCase): 

    def test_stupid(self): 
     self.assertTrue(blabla.some_function()) 


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


Ve dosyadan: test_something.py I /Files/Controllers/blabla.py içinde olan bir işlevi test etmek istiyorsanız

mainApp.py 
testController.py 
Files 
    |__init__.py 
    |Controllers 
    | blabla.py 
    | ... 
UnitTests 
    |__init__.py 
    |test_something.py 

Yani, aşağıdakileri deneyin testController.py, ben şu kodu çalıştırın: hayır arızaları verir

import TestUnits.test_something as my_test 
my_test.unittest.main() 

, ancak hiçbir testler

infaz
---------------------------------------------------------------------- 
Ran 0 tests in 0.000s 

OK 
[Finished in 0.3s] 


hiçbir bağımlılık durumu olan bir test ile çalıştı ve " ana" çalıştığını olarak idam eğer, ancak dışarıdan çağrıldığında, aynı çıkışı var:

import unittest 


def tested_unit(): 
    return True 


class TestMyUnit(unittest.TestCase): 

    def test_stupid(self): 
     self.assertTrue(tested_unit()) 


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

Soru: Bunu nasıl çalıştıracağım?

cevap

4

test_something.py, bu yapın:

def suite(): 
    suite = unittest.TestSuite() 
    suite.addTest(unittest.makeSuite(TestMyUnit, 'test')) 
    return suite 

testController.py, bu yapın:

from TestUnits import test_something 

def suite(): 
    suite = unittest.TestSuite() 
    suite.addTest(test_something.suite()) 
    return suite 

if __name__ == '__main__': 
    unittest.main(defaultTest='suite') 
+0

Bu biraz biraz verbose, ama çalışıyor, teşekkürler. – bgusach

15

yöntem unittest.main() Tüm unittest.TestCase sınıfları bakar bağlamda mevcut. Bu nedenle, test sınıflarınızı testController.py dosyanıza aktarmanız ve bu dosya bağlamında unittest.main() öğesini çağırmanız yeterlidir.

Yani dosya testController.py sadece bu gibi görünmelidir: gibi testler subprocess.call() kullanarak bir geçici çözüm

import unittest  
from UnitTests.test_something import * 
unittest.main() 
+0

Teşekkürler, ama işe yaramıyor. Sonuç aynı: test yürütmez. – bgusach

+0

Tamam kötüyüm. Tüm test örneklerini test_something dosyasından içe aktarmanız gerekir. UnitTests.test_something import TestMyUnit (veya *) ile deneyin ve işe yaramalısınız! – rparent

+0

Çalışıyor, teşekkürler. – bgusach

0

yok:

import subprocess 

args = ["python", "test_something.py"] 
subprocess.call(args) 
İlgili konular