2016-04-12 15 views
0

Bazı testleri uygulamak için Behave kullanmaya başladım. Varolan bir süreliğimden bazılarını değiştirmek istiyorum (daha fazla özellik testi). Bunların bir kısmı, arka uç hizmetine yapılan belirli çağrıların yapmaları gereken hataları artırdığını kontrol etmek için assertRaises kullanır. Behave'de (veya belki de Gherkin'de) benzer bir şey olması mümkün mü?Python tanıtıcıyı destekleyebilir

Aşağıdaki onaysız servisler arka uç hizmetimi çağırır ve bir konuk olarak oturum açtıktan sonra yönetici görevini gerçekleştiremez (do_admin_task). Bir istisna oluşturmalı.

def test_mycall(self): 
    service = myservice('guest', 'pwd') 
    self.assertRaises(NoPermission, service.do_admin_task, some_param) 

Özellik dosyamda, senaryonumu nasıl oluşturabilirim? Bunun gibi?

scenario: test guest can't do an admin task 
    given I log on to my service as guest/pwd 
    when I try to perform my admin task 
    then it should fail saying NoPermission 

bu zaten adımda bir istisna olacak, bu yüzden bile sonra adıma almazsınız inanıyoruz.

Bunun hakkında düşünebileceğim potansiyel bir yol, bu adımların her ikisini de gerçekleştiren ve istisna işlemlerini gerçekleştiren belirli bir adım oluşturmaktır. Eğer daha düşük seviyedeki çağrılarda hatalarla uğraşmak istersem, bu adımların çoğunu tekrar yazmak zorunda kalırdım, ki bu da tam olarak Behave'a geçerek kaçınmayı umduğum şeydir.

Buna nasıl yaklaşmalıyım?

cevap

0

Gherkin düzeyinde düşünürken, adımında istisna, 'un beklenen bir sonucudur. Dolayısıyla adım tanımının bir try bloğu olmalı ve sonucu/istisnayı bağlamda saklaması gerekir. ve daha sonra adımı bu sonucu/istisnayı kontrol edebilir.

@When(u'I try to perform my admin task') 
def step_impl(context): 
    try: 
    context.admintaskresult = myservice(context.user, context.pass) 
    context.admintaskexception = None 
    except Exception as ex: 
    context.admintaskresult = None 
    context.admintaskexception = ex 

@Then(u'it should fail saying NoPermission') 
def step_impl(context): 
    assert isinstance(context.admintaskexception, NoPermissionException) 
+0

Teşekkürler, bu açık bir özlü yanıttır. – Baire