2017-03-04 42 views
1

在我使用的其他測試框架中,編寫測試助手時,能夠自動測試它們是很好的,即測試它們失敗並通過測試。我可以期望(需要)失敗測試嗎?

讓我用下面的助手(在現實中,它是一個複雜得多):

func IsRedirect(t *testing.T, code int) { 
    assert.True(t, code >= 300) 
    assert.True(t, code < 400) 
} 

那麼肯定,我可以這樣寫:

func TestIsRedirect(t *testing.T) { 
    IsRedirect(t, http.StatusSeeOther) 
} 

但我也想寫類似:

func TestNotRedirect(t *testing.T) { 
    t.RequireFailure() 
    IsRedirect(t, http.StatusOK) 
} 

注意,我真的不希望這樣寫:

func IsRedirect(code int) bool 

因爲該函數有不止一個或兩個可能會失敗的條件,而且我希望能夠針對特定的失敗案例assert

+1

IMO測試框架。失敗意味着什麼?你測試的條件之一失敗了嗎?他們都失敗了?你有一個隨機的零指針解引用?你的初始化代碼崩潰了?如果你期望任何這些事情發生,那麼你可以測試他們。扭轉你的條件是微不足道的。不可能正確地猜出你實際意思的框架。 – Art

+1

這似乎是一個非常奇怪的實現。你正在控制assert.True調用;你告訴框架什麼是「正確」和「不正確」,然後你想顛倒正確和錯誤的含義?只要堅持你實際期望的。 – Adrian

回答

0

你可以這樣做以下幾點:擁有「承擔失敗」模式是啞

func IsRedirect(t *testing.T, code int, b bool) { 
    assert.Equal(t, b, code >= 300) 
    assert.Equal(t, b, code < 400) 
} 

func TestNotRedirect(t *testing.T) { 
    IsRedirect(t, http.StatusOK, false) 
} 
相關問題