2017-03-04 43 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) 
} 
相关问题