2016-10-07 60 views
0

測試中,我有一個簡單的去功能我想測試:「無效的內存地址」,而在圍棋

func root(c echo.Context) error { 
    return c.String(http.StatusOK, "This is the root!") 
} 

我的測試是這樣的:

import (
    "net/http" 
    "testing" 

    "github.com/labstack/echo" 
    "github.com/stretchr/testify/assert" 
) 

type Context struct { 
    echo.Context 
} 

func TestRoot(t *testing.T) { 
    c := new(Context) 
    expectedResult := c.String(http.StatusOK, "This is the root!") 
    actualResult := c.String(http.StatusOK, "This is the root!") 

    assert.Equal(t, expectedResult, actualResult, "they should be equal") 
} 

現在,當我運行測試,我得到這個錯誤:

panic: runtime error: invalid memory address or nil pointer dereference [recovered] 
     panic: runtime error: invalid memory address or nil pointer dereference 

我是相當新的去,只是想試圖理解它。我知道,當我處理一個不存在的對象時,我得到這個錯誤。但是我所做的每個變量賦值都沒有變化,爲nil

Can somebody point me to a solution? Or tell me how simple unit tests should look like in Go?

+0

你的'Context'類型具有嵌入式接口; 'echo.Context',它需要一個值。我不確定你在這裏準備做什麼,因爲你沒有處理任何請求或響應。 – JimB

+0

在調用該接口上的方法之前,'TestRoot'函數必須將c.Context設置爲非零接口值。也許Echo包提供了一種創建測試環境的方法。 –

+0

這是我的問題。在我習慣的單元測試中,我只測試根函數是否以合適的值返回正確的對象。我怎麼能這樣做在Go(或者我不應該這樣做呢?) –

回答

-1
package main 

import (
    "testing" 

    "github.com/labstack/echo" 
) 

// Context context struct 
type Context struct { 
    echo.Context 
} 

// TestRoot func test root 
func TestRoot(t *testing.T) { 
    c := &Context{} 

    if c == nil { 
     t.Errorf("ERROR: type Context could not be null, received %v", c) 
    } 
} 

你恐慌的錯誤玉米消失,告訴我,如果我錯了。

我不明白你想要做什麼。但我只是試圖解決你的恐慌錯誤,並告訴你如何進行測試,你只需要使用你的函數並測試一些條件的結果,然後使用測試包來測試錯誤