在Go中测试时“内存地址无效”

时间:2016-10-07 14:25:56

标签: unit-testing go

我有一个简单的Go功能,我想测试一下:

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

我是Go的新手,只是想尝试理解它。我知道当我处理一个不存在的对象时,我收到了这个错误。但我正在做的每个变量赋值都没有变化为nil

  

有人能指出我的解决方案吗?或者告诉我Go中的单元测试应该是多么简单?

1 个答案:

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

你的恐慌错误消失了,告诉我我是不是错了。

我也不太了解你正在尝试做什么。但我只是试图修复你的恐慌错误,并告诉你如何进行测试,你只需要使用你的函数并在某些条件下测试结果,然后只使用测试包来做测试错误