2016-03-31 16 views
1

aşağıdaki fonksiyon için bir birim test yazıyorum:Python Birim testi: Onaylama Hatası sorunu

def _parse_args(): 
    parser = argparse.ArgumentParser(
     description='Script to configure appliance.' 
    ) 
    parser.add_argument('--config_file', 
         help='Path to a JSON configuration file') 
    print parser.parse_args() 
    return parser.parse_args() 

hiçbir yapılandırma dosyası yukarıdaki işlevinde baskı deyimi kullanılarak doğrulandı (daha sonra verilir işlevini çalıştırdığınızda):

self.assertEquals(my_script._parse_args(), 'Namespace(config_file=None)') 

: benim birim testinde parser.parse_args()=Namespace(config_file=None)

Bana verilen hiçbir yapılandırma dosyası ile işlevini çalıştırın ve bir assertEquals içerir Ben tırnak işaretleri olmadan birim testi değiştirirseniz

AssertionError: Namespace(config_file=None) != 'Namespace(config_file=None)' 

:

self.assertEquals(my_script._parse_args(), Namespace(config_file=None)) 

Bir NameError olsun:

NameError: global name 'Namespace' is not defined 

Açıkça alıntıları kullanarak değil Ama bu AssertionError üretir Bunu yapmanın doğru yolu ama Namespace(config_file=None)'un ortaya çıktığını nasıl anlarım?

cevap

1

Değişim

self.assertEquals(my_script._parse_args(), Namespace(config_file=None)) 

self.assertEquals(my_script._parse_args(), argparse.Namespace(config_file=None)) 

Namespace Sizin ithal argparse modülün bir niteliktir. Namespace'u kendi başınıza içe aktarmadınız. bağımsız değişken olmadan kodunuzu çalıştırmak için

Demo: Eğer print parser.parse_args() arayarak almak, bir Namespace nesnesi değil, bunun bir dize gösterimi döner _parse_args()

print _parse_args() == argparse.Namespace(config_file=None) # True 
1

Verilen Namespace nesnesinin config_file özniteliğini kontrol edin.

self.assertIsNone(my_script._parse_args().config_file) 
0

İşleviniz.

my_script._parse_args().config_file 

ve Yok değilse iddia:

sizin fonksiyonuna

inceleyelim: erişim onu ​​tutan niteliklerini nesneye için

def _parse_args(): 
    #some code 
    print parser.parse_args() <-- prints the string representation of the Namespace object 'Namespace(config_file=None)' 
    return parser.parse_args() <-- returns the Namespace object 

, zaman nokta gösteriminde kullanabilirsiniz döndü

self.assertIsNone(my_script._parse_args().config_file) 

Veya yapıcısını çağırarak herhangi bir Namespace nesnesi oluşturabilirsiniz:

argparse.Namespace (config_file = None, another_arg='some value') 

ve assertEqual kullanmak:

self.assertEqual(my_script._parse_args(), argparse.Namespace (config_file = None))