2016-10-07 13 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

' typeには埋め込みインターフェイスがあります。 'echo.Context'は値を必要とします。あなたがリクエストやレスポンスを扱っていないので、あなたがここで正確にやろうとしていることがわかりません。 – JimB

+0

'TestRoot'関数は、そのインタフェース上のメソッドを呼び出す前にc.Contextを非nilインタフェースの値に設定する必要があります。おそらく、Echoパッケージは、テストのためのそのようなコンテキストを作成する方法を提供します。 –

+0

それは私の質問です。私がしていたユニットテストでは、ルート関数が適切な値で正しいオブジェクトを返すかどうかをテストします。 –

答えて

-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) 
    } 
} 

私が間違っている場合は、教えてください。

あなたのやっていることも分かりません。しかし、私はちょうどあなたのパニックエラーを修正しようとしたところ、テストを行う方法を示しました。あなたは関数を使用していくつかの条件で結果をテストし、テストパッケージを使ってテストエラーを行う必要があります。

関連する問題