2016-04-12 61 views
0

我開始使用Behave來實現一些測試。我想替換一些現有的單元測試(這是更多的功能測試)。其中一些使用assertRaises來檢查對後端服務的某些調用是否會引發他們應該發生的錯誤。有沒有可能在Behave中有類似的東西(或者可能是小黃瓜)?python可以處理assertRaises

以下unittest調用我的後端服務,並且在guest虛擬機已登錄時無法執行管理任務(do_admin_task)。它應該引發一個例外。

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

在我的功能文件中,我將如何創建我的場景?喜歡這個?

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 

我認爲,這將提高已經在一步一個例外,所以甚至不會給然後一步。

我可以想象的一種潛在方式是創建一個執行這兩個步驟並執行異常處理的特定步驟。如果我想要在低級調用中嘲諷錯誤,那麼我將不得不重寫這些步驟中的很多步驟,這正是我希望通過切換到Behave而避免的。

我該如何解決這個問題?

回答

0

在考慮小黃瓜水平時,例外情況是當步驟時的預期結果。所以步驟定義應該有一個try塊,並將結果/異常存儲在上下文中。然後然後步驟可以檢查此結果/異常。

@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

謝謝,這是一個清晰簡明的答案。 – Baire